ec2에 한국 표준시 적용하기 - woowacourse-teams/2020-songpa-people GitHub Wiki
문제
우리가 운영하고 있는 ec2는 UCT(협정 세계시)
를 따르기 때문에 한국 시간보다 9시간 느리다.
문제가 되는 것은 서비스에 접속하는 로그를 남길 때, 데이터베이스에 정보를 저장할 때 등이다.
로그 분석의 문제
로그를 저장할 때 문제가 되는 것은 경험상의 문제였다.
로그 파일을 분석하는것에 익숙하지 않았기 때문에 서비스 접속에 에러가 발생했을 때 생성된 로그가 지금 접속 때문에 생긴 것인지 과거에 생긴 것인지 시간을 보고서 직관적으로 확인이 힘들었다.
데이터 저장 문제
데이터베이스에 데이터를 쌓을때 우리는 가게 생성 / 변경 로그
를 쌓기 위해 created_date / modified_date
컬럼을 관리한다.
우리는 Spring Data의 AuditingEntityListener
를 이용해서 자동으로 시간 컬럼에 대한 값을 저장하고 있다.
이 클래스는 DateTimeProvider
라는 빈을 직접 만들어서 주입해주면 엔티티를 저장할 때 설정한 시간대로 저장할 수 있다.
하지만 우리는 따로 빈을 주입하지 않고 기본으로 생성되 주입되는 빈을 사용해서 시간을 지정하고 있는데 이 빈은 CurrentDateTimeProvider
가 주입된다.
따라서 프로그램이 실행되고 있는 환경의 시간 값이 저장되는데 ec2의 시간이 UCT 이므로 우리가 새벽에 스케쥴러를 실행해서 데이터를 저장한다면 데이터베이스에 저장되는 값은 9시간 빠른 저녁 시간이 저장될 것이다.
해결 방법
-
시간을 변경할 ec2에 접속한다.
-
인스턴스에 사용할 표준 시간대를 식별한다.
/usr/share/zoneinfo
디렉토리에 표준 시간대에 대한 정보가 들어있다.- 우리는 서울 시간을 적용할 것이기 때문에
/usr/share/zoneinfo/Asia/Seoul
이 있는지 확인한다.
-
etc/sysconfig/clock 파일을 수정한다.
- ec2에 해당 디렉토리와 파일이 없을 수 있다.
- 만약 디렉토리와 파일이 없다면 다음 명령어를 수행해서 만들어준다.
> sudo mkdir /etc/sysconfig > sudo vi /etc/sysconfig/clock
- 파일을 생성했다면 다음 내용을 입력해준다.
ZONE="Asia/Seoul" UTC=true ARC=false
-
인스턴스가 현지 시간 정보를 참조할 때 표준 시간대 파일을 참조하도록 심볼릭 링크 파일을 생성해준다.
> sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
-
ec2를 재부팅한다.
> sudo reboot
- 재부팅 명령어를 실행하면 ec2가 종료되고 재실행 된다.
- aws 페이지에서는 표시되지 않으므로 잠시 기다린 후에 다시 접속을 시도하면 접속 가능하다.
-
date 명령어로 현재 시간을 확인해본다.