팀 프로젝트가 끝난 후 timezone
에 대해 다시 설정해보았다.
시간을 저장하기 위해서 LocalDateTime
을 사용했다. Java 8
이후부터는 이 클래스를 사용해 로컬의 시간을 가져올 수 있다.
RDS 파라미터 그룹에서 timezone
을 Asia/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으로 테스트했을 때도 한국 시간으로 잘 나온 것을 확인했다.
아키텍처