TICTACKET
원리

서버시간이란? 밀리초까지 재는 원리

서버시간은 어디서 오고, 초 단위밖에 없는 Date 헤더로 어떻게 밀리초를 알아낼까요? TICTACKET의 초 경계 추적 방식과 ±오차가 생기는 이유를 쉽게 설명해요.

2026-11-11 작성 · 3분 읽기 · #서버시간 #Date 헤더 #원리 #밀리초 #오차

티켓팅 준비하면서 "서버시간 맞추기"라는 말, 한 번쯤 들어보셨죠? 그런데 서버시간은 정확히 뭘까요? 그리고 어떻게 그걸 밀리초(ms, 1/1000초)까지 알아낼 수 있을까요?

서버시간 = 사이트 컴퓨터의 시계

웹사이트에 접속하면, 사이트의 컴퓨터(서버)가 응답을 보내요. 이 응답에는 눈에 보이지 않는 Date 헤더가 붙어 있는데, 여기 서버가 생각하는 현재 시각이 적혀 있어요.

Date: Wed, 11 Nov 2026 06:19:42 GMT

예매 오픈 판정도 결국 사이트 쪽 시계 기준이니까, 이 시계를 아는 게 중요하다는 거예요.

문제: 초 단위밖에 없어요

위 예시를 보면 초(42초)까지만 적혀 있어요. 42.001초인지 42.999초인지는 알 수 없죠. 거의 1초나 되는 차이예요. 티켓팅에선 너무 큰 차이죠.

해결: "초가 바뀌는 순간"을 잡아요

TICTACKET은 초가 넘어가는 순간을 추적해서 밀리초를 알아내요.

비유: 벽 너머 시계 맞히기

벽 너머에 초침만 있는 시계가 있고, 창문으로 잠깐씩만 볼 수 있다고 해볼게요.

  • 내가 본 순간 "42초"였고, 아주 조금 뒤에 봤더니 "43초"였다면?
  • 그 사이 어딘가에서 초가 바뀐 거예요!
  • 두 번 엿본 간격이 짧을수록, 초가 바뀐 순간을 정밀하게 알 수 있어요.

실제 측정 순서

  1. 준비 요청: 먼저 한 번 접속해서 연결을 열어둬요. 이후 요청이 빨라지도록요.
  2. 촘촘한 연사(coarse burst): 약 1.1초 동안 40ms 간격으로 요청을 보내요. 1초 이상 훑으니 초가 바뀌는 순간이 반드시 한 번은 포함돼요.
  3. 정밀 조준(refine): 이제 "대략 이쯤에서 초가 바뀐다"는 걸 알았으니, 그 경계를 향해 요청을 조준해서 보내요. 범위를 반씩 좁혀가는 방식이라, 몇 라운드면 범위가 크게 줄어요.

각 응답은 "서버 시계와 내 시계의 차이는 최소 이만큼, 최대 이만큼"이라는 조건을 줘요. 이 조건들을 겹쳐서 모두를 만족하는 구간을 남기는 거예요.

왜 항상 ±오차가 있나요?

요청을 보내고 응답을 받기까지 걸린 시간(왕복시간, RTT) 동안, 서버가 정확히 언제 시각을 찍었는지는 알 수 없어요.

비유: 친구에게 "지금 몇 시야?"라고 문자를 보냈는데 답장이 1분 뒤에 왔다면, 친구가 시계를 본 건 그 1분 사이 어딘가예요. 정확히 언제인지는 몰라요.

그래서 아무리 정밀하게 재도 왕복시간의 절반 정도는 불확실성으로 남아요. TICTACKET이 결과를 "+18ms ±28ms"처럼 범위로 보여주는 이유예요. 숨기지 않고 솔직하게 보여주는 거죠.

  • 왕복시간이 짧을수록(가까운 서버, 안정적인 회선) ±가 좁아져요.
  • 2026-11-11 실측에서 CDN 뒤의 CGV는 ±8ms, 오차가 넓었던 메가박스는 ±122ms였어요.

내 시계도 확인해야 해요

서버시간을 알아도 내 기기 시계가 틀리면 소용없어요. 실측 당시 개발 PC 시계는 표준시보다 76ms 늦어 있었어요. TICTACKET은 이런 차이까지 함께 계산해서 보여줘요.

정리

  • 서버시간은 응답의 Date 헤더에서 와요(초 단위).
  • 초가 바뀌는 순간을 연사 + 정밀 조준으로 추적해 밀리초를 추정해요.
  • 네트워크 왕복시간 때문에 ±오차는 항상 남아요. 값이 의심되면 보정하기로 다시 재보세요.

바로 써보기

관련 글