그놈의 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 |