서버 교양

글로벌 푸시 시스템 구성하기

시간을 거스르는자 2015. 1. 16. 17:12

그놈의 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 시간에 오프셋을 더해서 그게 현재 시간이면 그에 해당하는 타임존 녀석들에게 푸시를 보내는 것이다. (물론 이것을 위해서는 유저정보에 타임존 네임이 있어야 할것이다)


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