타임머신 타고 9시간 전으로~

Jung·2022년 1월 6일
1

TIL

목록 보기
74/77
post-thumbnail
post-custom-banner

팀 프로젝트가 끝난 후 timezone에 대해 다시 설정해보았다.

시간을 저장하기 위해서 LocalDateTime을 사용했다. Java 8 이후부터는 이 클래스를 사용해 로컬의 시간을 가져올 수 있다.
RDS 파라미터 그룹에서 timezoneAsia/Seoul로 변경했다. RDS에는 시간이 한국 시간으로 잘 저장되었다.
하지만 배포 후 우리 사이트에서 작성 및 수정 시간, 댓글 시간이 한국 시간보다 9시간이 느리게 나왔다.

첫 번째 시도 방법

EB 로그에서 timestamp를 확인하면 UTC로 되어 있어서 한국 시간으로 변경했다. EB를 사용하고 EC2 인스턴스의 timezone을 변경하려면 아래와 같이 하면 된다.
.ebextensions/00-set-timezone.config 파일을 프로젝트 최상단에 추가 후, 아래 코드를 입력하고 배포를 하면 EC2의 시간이 한국 시간으로 변경된다.

commands:
  set_time_zone:
    command: ln -f -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

아래 코드는 GitHub Actions를 위한 코드다. yml 파일에 작성했다.

- name: Generate deployment package
    run: |
      mkdir -p deploy/.ebextensions
      cp Dockerrun.aws.json deploy/Dockerrun.aws.json
      cp .ebextensions/00-set-timezone.config deploy/.ebextensions/00-set-timezone.config
      cd deploy && zip -r deploy.zip .

결과
EB 로그는 한국 시간으로 뜨지만 사이트에서 확인되는 시간은 똑같이 9시간이 느리게 나왔다.

두 번째 시도 방법

MytripApplication.java에 아래 코드를 추가해 애플리케이션이 실행되는 서버의 timezone을 한국 시간으로 변경했다.

@PostConstruct
public void setTimeZone() {
    TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
}

결과
스프링 부트에서 timezone을 변경하면 한국 시간으로 잘 나온다. 직렬화가 잘 됐는지 Postman으로 테스트했다. 한국 시간으로 잘 나왔다.

근데 이 방법 말고 또 다른 방법은 없을까??

세 번째 시도 방법

Dockerfile에

RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime && echo Asia/Seoul > /etc/timezone

위 코드를 추가했다.

결과
프로젝트 아키텍처상 스프링 프로젝트가 도커 이미지로 빌드되어 도커 컨테이너에서 실행되기 때문에 도커 timezone을 변경해봤다. 사이트에서도 한국 시간으로 잘 나왔고 Postman으로 테스트했을 때도 한국 시간으로 잘 나온 것을 확인했다.

아키텍처

profile
97kim.github.io
post-custom-banner

0개의 댓글