클라이언트-서버간 시간차에 대한 고찰

covy·2024년 6월 10일
post-thumbnail

서론

청하 서비스를 개발하다가 흔히 게시글에 있는 "몇 초전" 로직에 문제가 있어 그 과정에 대해서 기록하고자 한다.

위와 같이 클라이언트 - 서버간 시간 동기화가 되지 않아서 -시간대를 만날 수 있었다. 이를 개선하는 건 마이너스 시간차인 경우 "방금 전" 또는 "0초 전" 같이 간단하게 개선할 수 있지만, 왜 이런 시간차가 발생하는지 명확히 설명해보고 싶어 딥다이브 하게되었다.

왜 발생되는 걸까?

두가지 이유가 있다.
첫 번째는 시간 동기화이다. 네트워크 문제 등 제 때 시간 동기화를 안해주면(위 스크린샷인 경우) 저런 많은 시간이 차이가 날 수 있다.

두 번째도 시간 동기화다. 다만 좀 더 디테일한 원인이다.
티케팅, 수강신청을 할 때를 생각해보자. 항상 우리는 정각이 되었을 때 클릭을 하지만, 대기열에 갇히거나 대기열에서 쫒겨날 때도 있다.

그 원인은 우리가 쓰는 컴퓨터와 티케팅, 수강신청을 관리하는 서버의 시간차가 있기 때문이다.
코딩애플님 영상 설명

클라이언트 - 서버 시간차는 왜?

우리 서비스의 상황을 예시로 들어보겠다.

서버에서 글이 언제 업로드가 되었는지 Response로 내려준다

createDate":"2024/05/20 02:24:51

클라이언트(안드로이드 기준)는 기기의 시간을 LocalDateTime을 통해 가져온다

LocalDateTime.now(ZoneId.of("Asia/Seoul"))

그러면 여기서 CreateDate와 LocalDateTime는 동기화가 되어있을까?

아니다

시간의 원천이 어디인지 알아보자. (루디브리엄 최하층으로 가보자)

안드로이드

서버

시간차에 대해 '윤초'를 적용하여 시간차 맞추는 방식이다.

다르긴 다른 것이나

윤초를 적용하는 방식이 조금 차이가 있다. 사실 같은 시간을 쓰기 위해 노력하는 것이지만 적용방식은 NTP 서버마다 다른 것으로 보인다.
AWS에서 윤초를 없앤다는 글도 있으니 참고하면 좋을 것 같다.

이렇게 딥다이브를 해보았지만 윤초에 대한 것보다 네트워크 통신 시간이 더 클 것 같다.

결론은 클라이언트-서버간 시간 동기화 + 통신 시간차 문제로 발생하는 것이고, 다른 SNS에서 "방금 전"이라는 텍스트를 쓰는 이유를 좀 체감하게 되었다.

0개의 댓글