문제 요약
- 타임딜 목록 API(
/api/store/products/timedeals
) 조회 시,- 로컬(KST) 환경에서는 상태값이 정상적으로
"ONGOING"
으로 표시됨 - Dev 서버(UTC)*에서는 같은 타임딜이
"UPCOMING"
으로 잘못 표기됨
- 로컬(KST) 환경에서는 상태값이 정상적으로
- 예시 타임딜:
startTime = 2025-06-12T16:00:00
- 조회 시점: 정확히
2025-06-12T16:00:00
- 기대 상태: ONGOING
- 실제 서버 응답 상태: UPCOMING
원인 분석
- 서버의 시스템 시간대가 UTC
LocalDateTime.now()
기준이 UTC로 계산됨startTime
이 16:00인데서버 현재 시각
은 07:00으로 인식되어 아직 시작되지 않은 것으로 판단됨
- Docker 컨테이너 시간도 UTC
- JVM 내부 시간과 동일하게 잘못 계산됨
- application.yml의 Jackson 설정 누락
- 응답 JSON에서
LocalDateTime
필드가 직렬화될 때 UTC 기준으로 변환됨 - 클라이언트 화면에서도 9시간 밀린 시간이 표시됨
- 응답 JSON에서
조치 내역
조치 항목 | 내용 |
---|---|
서버 시스템 시간대 변경 | sudo timedatectl set-timezone Asia/Seoul 로 OS 시간대 KST 설정 |
Docker 컨테이너 시간 반영 | Dockerfile 에 ENV TZ=Asia/Seoul 추가, localtime 심볼릭 링크 설정 |
JVM 타임존 설정 | -Duser.timezone=Asia/Seoul JVM 실행 옵션 추가 |
Jackson 직렬화 기준 수정 | application.yml 에 spring.jackson.time-zone: Asia/Seoul 설정 추가 |
확인 결과
- 로컬과 dev 서버에서 동일한
startTime
을 갖는 타임딜에 대해 - 조회 시점이
startTime
과 정확히 같을 경우 - 정상적으로
"ONGOING"
으로 판단됨 - 응답에 포함된 시간들도 한국 시간 기준으로 직렬화되어 출력됨
교훈
- 서버 시간, JVM 시간, JSON 직렬화 기준까지 모두 시간대 기준이 통일되어야 시간 민감한 기능이 정확하게 작동함
- 특히
LocalDateTime.now()
기반 로직은 타임존 오차에 민감하므로 환경 일치 필수 - 이후 신규 배포 시 시간대 통일 체크리스트 포함 필요
'Leafresh: 환경 챌린지 플랫폼' 카테고리의 다른 글
피드백 생성 요청의 비동기 아키텍처 전환 배경 및 구조 설계 (2) | 2025.07.08 |
---|---|
Kakao Redirect URI mismatch (KOE303) 트러블슈팅 로그 (1) | 2025.06.10 |
Chatbot SSE 기능 구현 트러블슈팅 로그 (2) | 2025.06.10 |
Redis Lua·Pub/Sub 기반 주문 처리 시스템 구축기 (2) | 2025.06.07 |
Redis 기반 통계 동기화 시스템에서의 캐시 누락 및 지수적 증가 문제 (0) | 2025.06.07 |