본문 바로가기
Q&A해결2026년 8월 20일1분 읽기

서버 로그 시간이 실제 시간보다 9시간 느린데 어떻게 맞춰야 할지 모르겠습니다

t
tz_woojin
조회 372댓글 2

운영 서버(우분투)에 로그를 쌓는데, 로그에 찍히는 timestamp가 실제 한국 시간보다 9시간 느립니다. 오후 6시에 발생한 이벤트가 로그엔 09:00 으로 찍혀요. 서버가 UTC로 돌아서 그런 것 같긴 한데요.

date 를 서버에서 쳐보면 UTC로 나오고, 애플리케이션(node)에서 new Date().toISOString() 으로 찍는 값도 UTC 기준입니다. 모니터링 대시보드에서 한국 사용자들이 볼 땐 KST로 봐야 하는데 매번 9시간 더해서 계산하려니 헷갈리고 실수가 납니다.

서버 타임존을 그냥 Asia/Seoul 로 바꿔버리면 될까요? 근데 그러면 다른 문제가 생길 수도 있다고 해서 조심스럽습니다.

댓글 2

김김영삼2개월 전
결론부터 말하면 서버 타임존은 UTC로 두는 게 맞고, 바꾸지 마세요. 표시할 때만 KST로 변환하는 게 정석입니다.

서버를 Asia/Seoul로 바꾸면 당장 로그는 편해 보여도 여러 문제가 생깁니다. 서버가 여러 리전에 흩어져 있으면 로그 시각 비교가 지옥이 되고, DB에 KST 로컬시간으로 저장되기 시작하면 나중에 리전을 옮기거나 글로벌 사용자가 붙을 때 데이터가 꼬입니다. UTC로 저장/기록하고 사람이 보는 경계에서만 변환하는 게 업계 표준이에요. toISOString()이 UTC(Z)로 나오는 건 잘 하고 있는 겁니다.

그러니 서버 설정 말고 두 군데만 손보세요.

첫째, 로그를 사람이 직접 볼 일이 많으면 로그 라인에 오프셋을 같이 찍어서(예: 2026-08-20T09:00:00Z) 최소한 착각은 없게 하세요. 굳이 로그를 KST로 찍고 싶으면 서버 전체가 아니라 그 프로세스에만 TZ 환경변수를 주면 됩니다. node면 실행할 때 TZ=Asia/Seoul node app.js 이렇게요. 그 앱 로그만 KST로 나오고 서버 나머지는 UTC 그대로입니다.

둘째, 대시보드/화면은 저장은 UTC로 하고 표시할 때 변환하세요. 프론트에서 사용자 브라우저 로컬로 보여주거나, 서버에서 포맷할 거면 Intl.DateTimeFormat('ko-KR', 옵션에 timeZone: 'Asia/Seoul')로 변환해서 내려주면 됩니다. 직접 9시간(9시간을 밀리초로) 더하는 방식은 절대 쓰지 마세요. 항상 타임존 이름(Asia/Seoul)으로 변환해야 나중에 딴 타임존 추가돼도 안 틀어집니다.

정리하면 저장은 UTC, 보여줄 때만 Asia/Seoul로 포맷. 이 원칙만 지키면 9시간 계산할 일이 없어져요.
ttz_woojin(guest)2개월 전
서버 타임존 바꾸려던 거 안 하길 잘했네요. TZ 환경변수를 그 앱에만 주는 것도 몰랐습니다. 저장은 UTC, 표시만 KST 원칙으로 정리하겠습니다. 자세한 답변 감사합니다!
Ctrl+Enter로 등록