지금 작업하고 있는 것이 투두리스트다보니, 시간이 상당히 중요한 상태가 됐다.
그런데 도커로 구성하면 기본 서버의 시간이 UTC로 되어있기 때문에 시간이 매칭되지 않는 문제가 생겼다.
이것을 어떻게 처리하지 않으면 계속 문제가 생길 것 같아서, 일단 TypeORM 상에서 수정을 해보려고 했다.
위의 사진을 보면 timezone이라고 적혀있는 옵션을 볼 수 있다.
대충 +09:00쓰면 UTC에서 KST로 바뀔 것 같아서 적어넣었지만?
적용이 안돼
.....?
옵션은 있는데 저게 정상적으로 적용이 되는 것 같지 않았다(...)
그래서 결국은 도커 컨테이너 그 자체에서 설정을 해야하는 것 같아서 찾아봤는데
대부분이 실행 후에 시간을 변경하는 것들이라 찾아봤더니 아래처럼 하면 적용을 할 수 있었다.
version: '3.7'
services:
my-server:
build:
context: .
dockerfile: Dockerfile
ports:
- 3000:3000
volumes:
- ./src:/my/src
environment:
- TZ=Asia/Seoul
my-dbserver:
platform: linux/x86_64
image: mysql:latest
environment:
MYSQL_DATABASE: 'mydb'
MYSQL_ROOT_PASSWORD: 'root'
TZ: Asia/Seoul
ports:
- 3306:3306
여기서 특이한 것은 env에 TZ(타임존) 설정
을 해줘야하는 것은 맞지만, 입력하는 방식이 두개가 달랐다.
그래서 저거때문에 조금 헤멨지만, 저렇게 Asia/Seoul을 넣는 것으로 KST 시간을 적용할 수 있게 됐다.
도커 컨테이너 내부 서버, DB시간이 KST로 적용된 것을 볼 수 있다.
그 외의 타임존 문제로 골치아팠던 것이 또 있었는데, 그것은 별개의 포스트에서 작성해볼 예정이다.
UTC로받고 프론트에서 luxon, dayjs같은 날짜라이브러리 사용하는게 낫지않나요? 굳이 꼭 KST로 저장할필요는 없다고 생각..