0. 들어가며
인턴을 시작하고 회사에서 기획 관련 업무들을 진행하고 있어서, 개발 공부에 신경을 많이 쓰지 못했다.
앞으로는 조금 더 노력해서 개발 공부도 열심히 하고, 배우는 내용들을 최대한 기록하고 공유하려고 한다.
1. 릴리즈 막바지 작업
1월에 시작했던 프로젝트 '해빗 HAVIT'이 드디어 릴리즈를 앞두고 있다.
다른 팀원분들도 많이 바쁘셔서 작업이 전체적으로 많이 밀리고 있었는데, 정말 릴리즈가 코 앞에 온 만큼 나도 막바지 작업을 열심히 달리고 있다.
프리티어 기간 연장을 위해 AWS 계정을 새로 생성했고, DB와 API 서버 모두 dev / prod 환경 분리를 진행했다.
(이 과정에서 겪었던 문제점들과 해결 과정은 조만간 정리해서 또 다른 글을 작성 할 예정이다.)
이 중 오늘은 푸시 알림 테스트 중 발생했던, DB의 시간대 관련 이슈를 다뤄보려고 한다.
2. 시간대 차이로 인한 문제의 발생
우선 우리 서비스는 '원하는 시각에 푸시 알림을 울리게' 하는 기능을 가지고 있고, 이 때문에 DB에 시간 데이터를 많이 보유하고 있다.
그리고 이 시간 데이터를 다루는 과정에서 '시간대' 문제가 발생했다.
문제의 발생 원인은,
Firebase API 서버의 시간대는 한국 시간대인 'GMT+9'로 설정되어 있었지만,
AWS RDS의 데이터베이스 시간대는 표준 시간대인 'UTC'로 설정되어 있기 때문이었다.
이 때문에,
API 로직에서 클라이언트에게 받아 온 'YYYY-MM-DD-hh-mm'의 형태를 그대로 데이터베이스에 삽입하면,
DB에는 그 시간 데이터를 UTC의 Timezone에 맞추어 인식해 저장하고 있었다.
즉, 클라이언트가 전송한 데이터는 '한국 시간대의 20:00'이지만, DB에서는 이를 '표준 시간대의 20:00'으로 인식하고 있었다는 뜻이다.
이 때문에 자연스레 푸시 알람에서는 표준 시간대와 한국 시간대의 차이인 9시간 만큼의 시차가 발생하고 있었다.
3. RDS, PostgreSQL 시간대 변경을 통한 문제 해결
이 문제를 해결하기 위해 우리는 데이터베이스의 시간대를 한국 시간대로 바꾸기로 결정했다.
우선, 데이터베이스를 관리하기 위해 사용하는 툴인 Datagrip에서 아래의 명령어를 이용해 현재의 시간대를 확인했다.
SHOW timezone;
위 명령어를 통해 출력된 값은 역시 UTC였고, 이를 변경해주기 위해 아래의 명령어를 사용했다.
SET timezone = 'Asia/Seoul';
간단한 SQL 구문을 통해 우선 RDS 인스턴스 안의 database 시간대를 변경할 수 있었다.
이후, AWS Console에서 RDS 인스턴스의 파라미터 그룹을 한국 시간대로 timezone을 변경한 새로운 그룹으로 변경 해 주었다.
4. 더 공부하고 싶은 점
우리 서비스의 경우 푸시 알림 시각이 유저의 입맛대로 계속 수정될 수 있어야 하기에, 관리를 용이하게 하기 위해 푸시 서버를 따로 분리 해 둔 상태이다.
이 때문에 푸시 알림과 관련된 요청은 '클라이언트 -> API 서버 -> 푸시 서버' 의 플로우로 이루어지고 있다.
푸시 서버의 경우 AWS beanstalk, Docker, MongoDB를 사용해 운영하는데, 이 때문에 팀원이 푸시 서버의 시간대 역시 한국 시간대로 수정해 문제를 완벽하게 해결할 수 있었다.
이 부분은 내가 직접 다뤄보지 못했기 때문에, 추후 공부를 통해 완벽하게 이해하교 적용한 뒤 다시 블로그에서 다루고 싶다.
또, 당장은 해빗이 한국을 대상으로만 서비스하기 때문에 DB의 기준 시간대 자체를 한국 시간대로 바꾸는 방법을 사용했지만,문제 해결을 위해 조사하던 중 이것이 좋은 방법이 아니라는 이야기를 들었다.
글로벌 서비스를 운영 할 경우, 다른 시간대의 유저의 시간 데이터를 한국 시간대로 저장하는 방법이 부적절하기 때문이다.국가별로 API 서버나 DB를 따로 두는 방법도 있을 것이라고 생각하는데, 이에 대해 확실한 경험이 없기 때문에, 이 부분 역시 더 공부해보고 싶다.
'Dev' 카테고리의 다른 글
AWS에서 RDS 인스턴스 생성하기 (0) | 2022.12.29 |
---|---|
VSCode에서 SSH로 리눅스 서버 원격 연결하기 (0) | 2022.12.11 |
NVIDIA DLI - 딥러닝의 기초 (2) | 2022.08.23 |
DB에서 상대적 위치 값을 활용해 드래그 앤 드롭으로 인한 순서 변경 처리하기 (0) | 2022.08.01 |
[THE SOPT 도커 스터디] Week5 - 3. 도커 스웜 (0) | 2022.06.01 |