그놈의 timezone 그리고 망할 DST때문에 한동안 머리가 아팠다.

하지만 결국 답을 얻었다. 컴퓨터는 항상 답이 있다. 정말 좋다. I love it!

아무튼. 방법이 뭐냐면

일단 뭐 frequency를 어떻게 하냐는 자기 맘이겠지만, 일단 하루로 하고

1. 하루에 한번씩 모든 timezone name(예를 들어 Asia/Seoul)을 쭉 가져와서 각각의 offset을 테이블로 저장해서 redis나 memory 변수에 들고 있는다.

뭐 대강 이런 느낌일 것이다.

{

"+0900": ['Asia/Seoul', 'Asia/..', '...']

"+0830": [....],

....

}

이렇게 해보면 약 40개정도의 offset키에 모든 타임존 리스트가 정리되어진다.


2. 이제 우리에게 필요한 것은 푸시 예약이다.

푸시 예약은 두가지 방법으로 할 수 있다. 첫번째는 UTC기준 두번째는 각 지역기준.

만약 UTC기준이라면 전체 타임존에 동일한 시점에 일괄 발송하겠다는 것이다. 이때는 위에서 만든 타임존 오프셋 테이블을 쓸 필요없이 그냥 그 UTC시간이 되었을떄 일괄 발송하면된다.

두번째가 관건이다. 이것을 위해 이짓을 하는거니까. 바로 지역시간 기준.

자 지역시간 기준 12:00. 각 지역이 12:00가 되었을때 푸시를 보내는 것이다.

일단 12시를 UTC로 저장해 놓고 매 분 도는 스케줄러가 저 오프셋 테이블의 키값을 가져와서 UTC 시간에 오프셋을 더해서 그게 현재 시간이면 그에 해당하는 타임존 녀석들에게 푸시를 보내는 것이다. (물론 이것을 위해서는 유저정보에 타임존 네임이 있어야 할것이다)


자 나는 이렇게 구현할거고 서비스 할것이다. 으하하하 

'서버 교양' 카테고리의 다른 글

Docker overview  (0) 2015.06.13
SSL 인증서 발급  (0) 2015.03.04
글로벌 푸시 보내기  (0) 2014.11.27
mongodb만 쓰면 mysql을 과연 안써도 될까?  (0) 2014.04.23
쿠키런 서버사이드 이야기  (0) 2014.04.04
블로그 이미지

시간을 거스르는자

,