OTT 멤버십 종료일이 4월 23일이라 단순히 날짜만을 저장하도록 date type을 사용했음
@Test
void 성공하는_테스트() {
//given
var given = LocalDate.parse("2024-04-22");
//when
var now = LocalDate.now();
//then
assertThat(now).isEqualTo(given);
}
버그
하지만 기존 구현은 서버 위치가 결과에 영향을 줌
이렇게 되면 멤버십이 이미 종료되어 시청할 수 없음에도 컨텐츠로 추천되게 됨
이유는 2가지 변수가 영향을 주기 때문이라고 생각
1) 내가 저장하는 날짜는 지역에 따라 달라짐
2) now()는 내부적으로 systemDefaultZone()를 사용하므로 시스템의 설정에 따라 달라짐
내 맥북에서 실행 시 zone은 서울 기준이고, AWS EC2는 UTC임
@Test
void 실패하는_테스트() {
//given
var given = LocalDate.parse("2024-04-22");
//when
var now = LocalDate.now(Clock.system(ZoneId.of("America/Los_Angeles")));
//then
assertThat(now).isEqualTo(given);
}
기존
버그
now()
는 내부적으로systemDefaultZone()
를 사용하므로 시스템의 설정에 따라 달라짐해결