← 전체 글로 돌아가기

Next.js

Linux 서버에서 journalctl 로그 시간을 KST로 읽으며 놓친 것

장애 시간을 찾을 때 서버 시간대와 journalctl 출력 기준을 섞어 봐서 원인을 늦게 찾은 설정 노트다.

로그는 있었는데 시간을 잘못 보고 있었다

새벽에 배포한 서비스가 09시쯤 한 번 재시작됐다고 생각했다. 그런데 사용자 제보 시간과 journalctl에서 본 시간이 맞지 않았다. 나중에 보니 서버는 UTC로 동작하고 있었고, 나는 머릿속으로 KST라고 착각한 채 로그를 읽고 있었다.

처음에는 systemd가 로그를 누락한 줄 알았다. 실제로는 내가 --since 범위를 잘못 잡아서 문제 구간을 비켜 보고 있었다.

확인은 timedatectl부터

서버에 접속하면 바로 서비스 로그로 들어가고 싶지만, 시간대가 섞이면 뒤의 판단이 전부 흔들린다.

timedatectl

출력에서 Time zoneEtc/UTC인지 Asia/Seoul인지 먼저 봤다. 서버 시간대를 꼭 KST로 바꿔야 하는 것은 아니지만, 내가 어떤 기준으로 로그를 읽고 있는지는 알아야 한다.

journalctl 범위를 명확히 쓰기

KST 기준 오전 9시 문제를 UTC 서버에서 찾는다면 0시로 바꿔서 볼 수 있다.

journalctl -u my-app.service --since "2026-07-10 00:00:00" --until "2026-07-10 00:20:00"

반대로 서버 시간대를 KST로 맞춘 환경이라면 그대로 적어도 된다. 중요한 건 팀 메모나 장애 기록에도 기준 시간대를 같이 남기는 것이다.

내가 바꾼 운영 메모 형식

예전에는 이렇게 적었다.

  • 9시쯤 재시작됨
  • 로그 확인 필요

지금은 조금 귀찮아도 아래처럼 쓴다.

  • 2026-07-10 09:03 KST 사용자 오류 제보
  • 서버 시간대: UTC
  • 확인 범위: journalctl --since "2026-07-10 00:00:00"

작은 서버일수록 시간 기준을 고정해 두기

사이드 프로젝트 서버는 혼자 보니까 대충 넘어가기 쉽다. 하지만 로그, 크론, 백업 파일명, 모니터링 알림이 서로 다른 시간대를 쓰기 시작하면 원인 찾는 시간이 길어진다.

내 기준은 이렇다.

  • 서버는 UTC로 둬도 된다.
  • 사용자에게 말하는 시간은 KST로 통일한다.
  • 장애 기록에는 UTC/KST를 같이 적는다.
  • cron 표현식에는 주석으로 기준 시간대를 남긴다.

이번에는 큰 장애는 아니었지만, 같은 9시라도 어디의 9시인지 확인하는 습관이 필요하다는 걸 배웠다.