시간을 신중히 다뤄라

임세진·2023년 10월 31일
0
public class Model {

    private LocalDateTime createdAt;
    
    private LocalDateTime modifiedAt;

    public Model() {
        this.createdAt = new LocalDateTime();
        this.modifiedAt = new LocalDateTime();
    }
    
    public boolean isModified() {
        return this.createdAt.isBefore(this.modifiedAt);
    }

}

createdAtmodifiedAt이 같은 값을 가질까?

그건 아무도 모른다. 소스상으로 한 줄의 차이가 있지만 실제로는 그 사이에 많은 명령어가 수행된다. 이는 값의 차이를 일으킬 수 있다.

new Model().isModified();

false를 반환하길 원하지만 true를 반환할 수도 있다. 항상 true를 반환하는 게 아니라 그럴 수도 있고 아닐 수도 있다는 것이다. 사람을 미치게 하는 부분이다.

이 글을 적는 이유는 회사에서 똑같은 일을 겪었기 때문이 아니다. 다시 말한다, 호텔 뷔페에서 즐겁게 회식하고 있었는데 장애 이슈를 전달받아 급히 사무실로 복귀하게 되어 적는 게 아니다. 로컬 테스트와 CI를 교묘하게 통과하고 QC에 의해 발견된 버그를 여러분에게 알리고자 적는 것이다. 그것도 배포된 지 3일 뒤에야 발견되었다. 잠복기 바이러스 같이 무서운 코드다.

나중에 똑같은 일로 야근하지 않아야 할 내 자신과 여러분에게 도움이 되길 바라며 글을 마친다.

profile
러닝 포인트를 찾는 개발자

0개의 댓글