글로벌 푸시 시스템 구성하기
그놈의 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 시간에 오프셋을 더해서 그게 현재 시간이면 그에 해당하는 타임존 녀석들에게 푸시를 보내는 것이다. (물론 이것을 위해서는 유저정보에 타임존 네임이 있어야 할것이다)
자 나는 이렇게 구현할거고 서비스 할것이다. 으하하하