1.Intro

타입스크립트 환경의 프로젝트를 개발하면서 날짜 처리를 위해 가볍고 강력한 dayjs 라이브러리를 도입했습니다.
로컬에서 개발할 때는 dayjs().format()을 찍으면 한국 시간으로 아주 잘 나옵니다.
그런데 이 코드를 AWS나 Docker 같은 서버 환경에 배포하면 시간이 9시간 느리게(UTC 기준) 나오는 문제가 발생합니다.
2.원인분석
이유는 아주 간단합니다. day.js의 시간을 어떻게 가져오냐를 알면 답은 아주 쉬워집니다. day.js는 기본적으로 시스템의 시간을 가져오게 되어있습니다.
- 내 컴퓨터 (Local): 윈도우 설정이 '서울'로 되어 있음 -> KST (+09:00) 출력
- 서버 (Server): 클라우드 서버나 컨테이너는 보통 표준시를 따름 -> UTC (+00:00) 출력
2-1 예시

위와 같이 시간을 호주 퍼스의 시간으로 변경을 해보고 코드를 실행해보겠습니다.
■ 결과

결과는 위와 같이 호주 퍼스의 시간이 출력되는 것을 확인 할수 있습니다.
그렇다면 이제 "나는 한국시간을 기준으로 계산하고 로직을 짤거야" 이런 경우에는 위처럼 단순하게 now를 사용하는 코딩을 하게되면 문제가 발생하게 됩니다.
아시다시피 기본적으로 aws나 다른 외국 클라우드 환경은 utc 시간을 기준으로 운용되고 있습니다.
이런 상황에서 저런식으로의 별도의 타임존 설정없이 로직을 구성하면 내가 원했던 시간대로 로직이 동작하지 않을 가능성이 매우 높습니다.
3.해결법
그렇다면 어떻게 타임존을 설정해야만 서버 환경 상관없이 지정을 할수 있을까요?
바로 타임존을 지정하는 방법입니다. 아래의 코드를 살펴보겠습니다.
위코드는 각각 시스템시간 utc,한국시간으로 설정되어 있습니다. 출력을 한번 해보겠습니다. 아래와 같이 시스템의 시간은 아까 호주시간 미국시간 한국시간 3개의 시간으로 각각 출력이 되는 모습을 확인 할수 있습니다.

그런데 매번 이렇게 tz(타임존)를 지정해서 호출하기엔 너무 번거롭습니다. 이런 경우에는 여러가지 방법이 있습니다.
3-1 main.ts 에 전역설정
위 코드처럼 main.ts에 전역으로 설정하는 방법이 있습니다. 이렇게되면 타임존이 한국으로 전역 지정되기때문에 따로 tz을 별도로 지정하지 않더라도 한국의 시간으로 출력되게 됩니다.
3-2 도커 사용시 도커 타임존 지정
도커를 사용할 경우 컨테이너의 타임존을 사용하기 때문에 컨테이너의 타임존을 kz로 설정을 변경하면 됩니다.
dockerfile
3-3. OS/Node 프로세스 환경 변수(TZ) 설정
Node.js 애플리케이션이 실행될 때 프로세스 자체에 타임존 환경 변수를 주입하는 방법입니다. 코드를 수정하지 않고도 실행 시점에 타임존을 결정할 수 있어 유연합니다.실행 명령어에 포함하기:서버를 켤 때 앞에 TZ=Asia/Seoul을 붙여주면 Node.js가 이를 인식합니다.
3-4. 공통 날짜 서비스 (Wrapper Service) 패턴
dayjs를 직접 임포트해서 쓰지 않고, 해당 프로젝트만의 DateService를 만들어서 모든 날짜 관련 기능을 위임하는 방법입니다."타임존 설정"이라기보다는 "타임존 정책을 한곳에서 관리하는 구조"입니다.구현
이렇게 되면 dayjs의 의존성을 한 서비스에서만 사용하기에 의존성이 줄어들게 되는 장점이 있습니다.
※ 마무리
이로써 day.js의 타임존을 설정하는 법을 알아보았는데 이렇게 간단한 설정이라도 그것을 구현하는 방법은 무수히 많고 다양합니다.
그중에서도 마음에들고 또 프로젝트의 상황과 맞고 리소스가 가장 적게 드는 방식을 채택하는 것이 중요합니다.
'TypeScript' 카테고리의 다른 글
| TypeScript 개발자라면 꼭 알아야 할 GitHub 네임드 개발자 & 오픈소스 모음 (0) | 2025.11.24 |
|---|---|
| 슬랙 웹훅 연동하기 - doesn't have a bot user to install 오류 해결 및 typescript 연동 예제 (0) | 2025.11.03 |
