본문 바로가기

Programming!

AWS Lambda 서버에서 moment.js timezone 문제

AWS Lambda 기반의 nodejs를 운영 서버로 사용중이다. ( 팀에 참여가 늦어서 왜?(lambda와 nodejs인가) 라는 질문은 아직 못했고... 답변해 줄 수 있는 분은 없는 듯 하다. )

 

여튼 15분이 지난 주문에 대해 사용자의 알림 액션을 막아 달라는 운영 업무 티켓이 하나 들어왔다.

 

기존에 있던 분은 원래 이상없이 잘 되던건데 말이죠..를 나에게 얘기해 준다.

 

까짓 nodejs가 별거냐 어짜피 javascript다 하며..소스를 까본다.

moment().tz('Asia/Seoul').isBefore(moment(dbOrderCompletedDateTime, 'YYYY/MM/DD HH:mm:ss.SSS').add(15, 'm'));

즉, 현재시간 기준으로 db에 저장되어 있는 주문완료 시간이 15분 이내인가?를 판단하는 부분이 문제로 보인다.

 

대충 테스트 코드 만들어서 로컬에서 돌려보니 뭔짓을 해도 정확하게 15분 기준으로 원하는 boolean 값을 출력해준다. 근데 서버에 올라가면 15분 전후와 무관하게 무조건 true를 반환한다.

여기서.. 기존에 잘되었다는 말을 나의 뇌 속에서 지워 버렸어야 하는데.... 남겨놓고 보다 보니.. 전혀 다른 쪽을 의심하게 되는.. 으~

 

무엇이 문제일까?? 당연히 Timezone이다.

현재시간은 Asia/Seoul로 하드코딩해서 뽑는다.. 그럼 느껴지지 않는가? 이 환경값을 글로벌하게 선언하지 않았다는 소리다. 

그 말은 곧 기본 lambda의 timezone은 utc라는 얘기가 될 수도 있...그럼 +09:00가 되는..

 

해서 다음과 같이 환경변수를 lambda에 추가해 주니 잘 되었다는 이야기.

 

timezone과는 별개로 현재상태의 isbefore, add를 쓰는 로직이 좋으려나.. between을 쓰는게 좋으려나.. 다른 로직으로 처리하는게 좋으려나 고민 스럽기는 함.