한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

게임 렉 백서 › 동기화 설계

순차 왕복이 많은 프로토콜 (chatty) Chatty protocol / sequential round trips

원인 ID sy-chatty · 주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발

그림과 실험이 있는 원본 카드로 열기 →

조작 한 번에 서버 왕복이 여러 번 순서대로 필요하면, 핑이 그 횟수만큼 곱해집니다.

왜 상점 열기 → 목록 요청 → 가격 확인 → 구매 → 인벤토리 갱신을 각각 따로 요청 → 그러면 앞 요청의 답을 받아야 다음 요청을 보냄 → 화면에서는 핑 150ms에서 한 번 사는 데 1초 가까이. 로딩이 유난히 김

증상
입력 지연, 접속 불가·무한 로딩
요인
지연
누가 겪나
특정 기능만, 나만
언제
특정 행동을 할 때, 접속·점검 직후
담당
주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발
게임개발팀 할 일
서버: 여러 단계를 한 번에 묶어 요청·응답하도록 프로토콜 변경(예: 구매 응답에 갱신된 인벤토리를 함께 담기). 클라이언트: 필요한 데이터를 미리 받아 두기, 결과를 기다리지 않는 UI.
수치 감각
걸리는 시간 ≈ 왕복 수 × (핑 + 서버 처리 + 틱 대기). 5번이면 핑 150ms에서 약 0.85~1초.
그래프에서는
처음부터 늘 높음 · 기능별 완료 시간, 조작 한 번의 왕복 수
확인할 곳
서버 쪽 패킷 캡처(Wireshark)에서 시험 계정으로 상점 구매·로그인 같은 조작을 한 번 하는 동안 요청과 응답이 몇 번 번갈아 오가는지와 그 간격을 셈. 서버 요청 로그가 있으면 세션 ID로 묶어 요청 수와 요청별 도착·응답 시각을 봄
이러면 맞음
조작 하나에 요청이 앞 응답을 기다렸다가 차례로 여러 번 오가고 완료 시간이 대략 왕복 수 × RTT이며 핑이 높은 지역 유저일수록 같은 기능이 비례해서 느림
이러면 아님
왕복은 한두 번인데 응답 하나가 오래 걸리면 서버 처리·DB 쪽 원인. 핑과 상관없이 모든 유저가 똑같이 느리면 서버 부하를 봄
확인 수단
인프라 도구로 확인(게임 코드 불필요)

출처

  1. Chatty I/O antipattern Microsoft Azure
    작은 I/O 요청이 많으면 누적 지연이 응답성을 크게 떨어뜨림. 요청을 더 크고 적게 묶으라는 권고

함께 보면 좋은 원인

같은 층: 동기화 설계

같은 증상(입력 지연)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기