운영 서버(우분투)에 로그를 쌓는데, 로그에 찍히는 timestamp가 실제 한국 시간보다 9시간 느립니다. 오후 6시에 발생한 이벤트가 로그엔 09:00 으로 찍혀요. 서버가 UTC로 돌아서 그런 것 같긴 한데요.
date 를 서버에서 쳐보면 UTC로 나오고, 애플리케이션(node)에서 new Date().toISOString() 으로 찍는 값도 UTC 기준입니다. 모니터링 대시보드에서 한국 사용자들이 볼 땐 KST로 봐야 하는데 매번 9시간 더해서 계산하려니 헷갈리고 실수가 납니다.
서버 타임존을 그냥 Asia/Seoul 로 바꿔버리면 될까요? 근데 그러면 다른 문제가 생길 수도 있다고 해서 조심스럽습니다.
댓글 2
서버를 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시간 계산할 일이 없어져요.