나만의 작은 도서관
[TIL][C++] 251022 MMO 서버 개발 120일차: 레이턴시(Latency)와 핑(Ping)의 차이, 그리고 Lag에 대해서, MaxLatency를 활용한 동기화 전략 본문
Today I Learn
[TIL][C++] 251022 MMO 서버 개발 120일차: 레이턴시(Latency)와 핑(Ping)의 차이, 그리고 Lag에 대해서, MaxLatency를 활용한 동기화 전략
pledge24 2025. 10. 23. 22:30주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다.
레이턴시(Latency)와 핑(Ping)의 차이
- 핑(Ping)은 레이턴시를 측정하는 도구 또는 행위.
- 레이턴시(Latency)는 그 측정으로 얻어진 결괏값. 즉, 지연 시간(ms)이다.
핑(Ping)에 대한 보다 자세한 설명
- 핑은 레이턴시를 측정하기 위해 사용되는 유틸리티 프로그램 또는 명령어.
- 명령어 ping은 네트워크 장치(클라이언트)가 다른 장치(서버)로 ICMP 에코 요청을 보내고, 서버가 다시 ICMP 에코 응답 패킷을 되돌려 보내도록 하는 행위를 한다.
- 핑이 측정하는 것은 RTT이며, 많은 경우 RTT를 레이턴시라고 칭한다.
- 구문 예시: “내 컴퓨터에서 핑을 해봤더니 레이턴시가 10ms가 나왔다.”
게임에 표시되는 네트워크 지표는 무엇을 의미하는가? ⇒ 대부분 RTT를 의미!

- 위 사진처럼 LOL에는 ms단위의 네트워크 성능 지표가 있다. 이 성능 지표는 무엇일까 궁금해할 수 있는데, 이 성능 지표는 RTT를 의미, 즉, 통상 레이턴시라고 부르는 그 녀석이다.
- 16ms라고 적혀있으니 클라이언트와 서버를 왕복으로 오가는 시간이 16ms정도 소요되었다는 것을 알 수 있다.
- 비단 LOL 뿐만 아니라 다른 게임들에서도 ms단위의 네트워크 성능 지표를 표시하는 경우들이 있는데, 대게 똑같이 RTT를 의미하게 된다.
어느 정도의 레이턴시가 낮은 레이턴시인가?
- 게임의 장르를 떠나서 단순 네트워크 상태를 진단했을 때 레이턴시가 낮을수록 상태가 좋다고 평가할 수 있다.
- 그런데 어느정도로 낮아야 게임하는데 지장이 없는지는 또 이야기가 다르다. 지장이 생길지 판단하고 싶다면 아래 구분을 참고하자.
레이턴시에 따른 쾌적함 정도(RTT 기준임)
- 0~20ms: 매우 쾌적함. 게임플레이에 있어 문제가 없다.
- 20ms~50ms: 충분히 쾌적함. 가끔 아주 약간의 딜레이가 있을 수는 있음
- 50ms~100ms: 플레이가 가능하긴 하나, 경쟁적인 게임에서는 렉이 있음을 인지하고 플레이해야 할 정도
- 100ms+: 빠른 속도의 물체가 있는 게임(Ex. FPS, MOBA, Racing)은 플레이 불가능에 가까움.
- 200ms+: 실시간 이동 동기화가 들어가는 모든 게임 플레이 불가능(답이 없는 수준)
레이턴시 예측을 위한 척도 - 지구 반대편과의 통신 시 RTT는 몇 ms?
- 지구 둘레는 약 40,075km. 즉, 왕복 전송 거리가 40,075km라는 것.
- “진공 상태”의 빛의 속도가 약 300,000km라는 것을 감안했을 때 순수 거리만 따지면 RTT는 133~134ms.
- 현실적으로 따지면 광섬유 사용 + 진공이 아닌 환경 + 라우팅 시간 + 서버 레이턴시 등이 포함되므로 약 200ms로 추정됨.
결론
- 지구 반대편과의 통신은 약 200ms로 추정됨.
- ⇒ 대한민국이라는 쪼그마한 땅에서 통신하는 경우 순수 물리적 거리 때문에 50ms 이상 나오는 경우는 없다고 보면 된다.
유저가 느끼는 실질적 지연 시간은 Latency가 아닌 Lag!
- Latency만이 지연을 만들어내지 않는다. 정말 다양한 이유로 다양한 곳에서 지연이 발생할 수 있다. 따라서, 전체적인 지연 시간을 따져야 실제로 유저가 느끼는 지연 시간을 가늠할 수 있는데, 그것이 바로 우리가 자주 말하는 Lag이 다.
- Lag은 사용가자 체감하는 총 지연 시간을 의미하므로, Latency는 Lag에 포함되는 지연 시간이다.
Lag에 포함될 수 있는 여러 요인들
- 서버 로직 처리 Latency
- Input Latency(키보드 입력 처리)
- 네트워크 Latency(물리적 거리, 회선 품질 포함)
- 그래픽 Latency(렌더링 지연)
MaxLatency를 활용한 동기화 전략
- 대부분의 경우, 클라이언트들의 레이턴시는 제각각이다. 즉, 동시간에 스킬을 시전해도 레이턴시가 높은 유저는 낮은 유저보다 늦게 스킬 발동 결과를 받는다.
- 서버를 개발하는 사람들은 공정한 환경을 만들어야 할 책임이 있으므로, 같은 시간에 스킬 발동 결과를 받을 수 있도록 해야 한다. 이때 사용할 수 있는 전략이 MaxLatency이다.
MaxLatency를 활용하는 과정
- 레이턴시를 구하기 위해 각 클라이언트의 RTT를 계산한다.
- RTT 중에서 가장 높은 RTT를 MaxLatency로 지정.
- 각 클라이언트에게 MaxLatency를 넘겨주고, 클라이언트들은 MaxLatency를 활용해 각 이동 패킷이 적용될 타이밍을 뒤로 미룬다.
뒤로 미루는건 어떻게?
- 이동 패킷이 바로 적용되면 안 되니 패킷이 오면 MoveQueue에 넣어놓기만 한다.
- MoveQueue는 우선순위 큐임
- 클라이언트는 매 프레임마다 Tick함수를 실행할 텐데, 이때마다 MoveQueue에서 가장 앞에 있는 타임스탬프와 (현재시간 + MaxLatency)를 비교한다.
- 만약 타임스탬프에 찍힌 시간이 적거나 같으면 pop 하고, 다시 확인하며 반복한다.
- 만약 타임스탬프에 찍힌 시간이 크면 무시한다.
자유 필드(즉, 사냥터)에서 MaxLatency 이동 동기화 전략을 사용하는 것이 옳을까?
- 개인적으로 그렇지 않다고 본다. MaxLatency 이동 동기화 전략을 사용했을 때 장점도 있지만, 분명 단점도 있기 때문. 자유 필드에선 단점이 더 크게 다가올 것으로 느껴진다. MaxLatency 적용 시의 장단점을 이야기하자면 아래와 같다.
- 장점: 필드 내(또는 동기화 해야 할 대상) 플레이어들의 각 클라이언트는 동시간대에 같은 패킷이 실행된다.(먼저 받는 클라이언트가 있을 순 있어도 Extra Latency를 더 크게 받기 때문에 동시간 실행)
- 단점: 다른 플레이어의 레이턴시가 나보다 높다면 내가 그만큼 Extra Delay를 먹는다. ⇒ 게임플레이 경험 떨어지게 됨
- 자유 필드의 경우, 생판 모르는 사람의 높은 레이턴시 때문에 내가 스킬이 늦게 나가는 것은 불합리하다고 생각됨. 그래서 최소한의 Extra Delay를 먹이거나 아예 무시하는 게 답.
최소한의 Extra Delay를 먹인다는 건 어떤 걸 말하는가?
- MaxLatency가 아닌 AverageLatency를 사용하거나, 고정된 레이턴시를 초과하여 딜레이를 먹지 않도록 하는 방식을 말한다. 이렇게 딜레이를 먹이면 딜레이가 훨씬 적게 먹기 때문에 스킬이 좀 더 빠릿빠릿하게 날아가게 된다.
