컨텐츠 검색
_#2. 클라이언트와 서버의 관계

2025. 11. 7. 14:25Unreal Engine/개념

1. 클라이언트(Client)

클라이언트는 사용자가 직접 조작하는 프로그램으로, 서버에 요청(request)을 보내고 응답(response)을 받아 화면에 결과를 보여주는 역할을 한다.
웹에서는 브라우저, 게임에서는 게임 실행 프로그램이 이에 해당한다.

1.1. 웹 클라이언트

  • 크롬, 사파리, 엣지 등과 같은 브라우저
  • 서버에 요청을 보내고, HTML·CSS·JS 파일을 받아 웹 페이지를 렌더링한다

1.2. 게임 클라이언트

  • 메이플스토리, 리그 오브 레전드(LoL)와 같은 게임 실행용 프로그램
  • 서버와 끊임없이 데이터를 주고받으며
    캐릭터의 움직임, 상대방 위치, 아이템 상태 등을 실시간으로 업데이트
  • .exe 파일 혹은 게임 런처 앱(Stove, Battle.net, Steam 등) 형태를 가진다
구분 주요 기능
게임 런처 (Steam, Battle.net, Stove 등) 로그인, 업데이트, 실행, 결제, 공지
게임 클라이언트 (MapleStory.exe, LeagueClient.exe) 게임 로직 실행, 입력 처리, 서버 통신

 


2. 게임 클라이언트 제작 엔진

게임 클라이언트는 보통 게임 엔진을 통해 제작된다.
엔진은 그래픽 렌더링, 물리 연산, 네트워크 처리 등 복잡한 기능을 효율적으로 지원한다.

엔진 사용 언어 특징
Unity (유니티) C# 낮은 진입 장벽, 인디·모바일·VR/AR 프로젝트에 강점
Unreal Engine (언리얼) C++, 블루프린트 고사양 그래픽, AAA 게임, 영화·건축 시각화 등 전문 분야에 강점

 


3. 서버(Server)

서버는 클라이언트의 요청을 받아 데이터를 처리하고 결과를 반환하는 시스템이다.
웹 서버는 단순한 페이지나 데이터를 제공하지만, 게임 서버는 실시간 상호작용과 동기화를 담당한다.

3.1. 웹 서버

  • HTTP 기반의 요청/응답 구조를 사용한다.
  • 주로 페이지나 정적 데이터를 빠르게 제공한다.
  • 예: 블로그, 쇼핑몰, API 서버 등

3.2. 게임 서버

  • 실시간 상호작용복잡한 상태 데이터를 초고속으로 처리
  • 수많은 유저가 동시에 접속하기 때문에 동시성(Concurrency), 부하 분산(Load Balancing), 데이터 일관성(Consistency)이 핵심
  • 예: 캐릭터의 위치, HP, 공격 판정, 아이템 드롭 등을 관리

4. 서버 구조

게임 규모에 따라 서버를 하나로 운영할 수도, 여러 대로 나눌 수도 있다.

4.1. 단일 서버 (Single Server)

  • 한 대의 서버가 모든 기능을 담당
  • 구현이 단순하고 초기 비용이 낮아 초기 개발이나 소규모 유저에게 적합
  • 단점: 트래픽 증가 시 병목 현상 발생

4.2. 분산 서버 (Distributed Server)

  • 여러 서버가 역할을 분담 (예: 로그인 서버, 게임 서버, 채팅 서버 등)
  • 확장성과 안정성이 높아 대규모 온라인 게임에 적합
  • 단점: 유저가 적을 경우, 오히려 리소스 낭비 가능

5. 서버 확장 방법

확장 방식 설명 장점 단점
수직 확장 (Vertical Scaling / Scale Up) 하나의 서버를 업그레이드 (CPU, 메모리 강화) 구조 변경이 단순 하드웨어 한계 존재
수평 확장 (Horizontal Scaling / Scale Out) 서버를 여러 대로 분산 운영 대규모 트래픽 대응 가능 네트워크 분산 및
동기화 복잡

6. 통신 규약 (Protocol)

서버와 클라이언트가 통신하기 위해서는 공통된 규칙(프로토콜)이 필요하다.

6.1. 주요 프로토콜

프로토콜 특징 사용 예시
HTTP / HTTPS 요청-응답 기반, TCP 사용, REST API 형태로 주로 사용 웹, API 서버
TCP 연결 지향형, 데이터의 순서·정확성 보장 로그인, 채팅, 거래 등
UDP 비연결형, 속도가 빠르지만 패킷 손실 가능 실시간 이동, 총알, 피격 판정 등
WebSocket 브라우저에서 양방향 통신 가능 웹 채팅, 실시간 알림
RUDP UDP 기반 + 신뢰성 향상 실시간 게임 통신 보완용

 

6.2. TCP와 UDP

실시간 게임에서는 정확성(TCP)반응속도(UDP) 사이의 균형이 중요하다.

구분 TCP (Transmission Control Protocol) UDP (User Datagram Protocol)
연결 방식 연결 지향형 (3-way handshake) 비연결형 (즉시 전송)
신뢰성 순서 보장, 손실 복구 (재전송) 순서 보장 없음, 손실 복구 없음
속도 느림 (오버헤드 많음) 빠름 (오버헤드 거의 없음)
전송 단위 스트림(Stream) 패킷(Packet)
데이터 크기 상대적으로 큼  작고 빈번
사용 목적 정확한 전달 빠른 반응
사용 예 로그인, 결제, 채팅, 인벤토리, 턴제 게임,  이동, 공격, 피격, 위치, FPS, MOBA, 레이싱, 액션 등 실시간 게임

 

🧩 UDP 보완 기술

기술 설명 사용 예시
RUDP (Reliable UDP) UDP에 신뢰성 레이어를 얹은 방식 (패킷 재전송, ACK 추가) Riot Games, Blizzard 등
QUIC (Google) UDP 기반 + TLS 보안 + 순서 보장 HTTP/3, Chrome, Stadia
ENet 게임용 UDP 라이브러리 (부분 재전송 + 순서 관리) 인디 게임, 엔진 네트워크 계층
RakNet 언리얼, Unity에서 사용된 UDP 기반 네트워크 미들웨어 멀티플레이, 실시간 통신

 

6.3. 언리얼 엔진의 적용 방식

언리얼 엔진은 기본적으로 UDP 기반으로 동작하지만,
데이터의 중요도에 따라 신뢰성을 설정할 수 있다.

RPC 옵션 특징 사용 예시
Reliable RPC 반드시 전달 (TCP와 유사) 아이템 획득, 퀘스트 완료, 채팅
Unreliable RPC 손실 가능 (UDP와 유사) 이동, 공격, 방향 전환 등
UFUNCTION(Server, Reliable)
void ServerAttack(AActor* Target);

UFUNCTION(Server, Unreliable)
void ServerMove(FVector Direction);

 

6.4. RPC vs REST API

구분 RPC (Remote Procedure Call) REST API (Representational State Transfer)
핵심 개념 원격에 있는 함수를 직접 호출 자원(Resource)요청(HTTP Method) 을 보내는 구조
통신 방식 함수 호출 기반 (예: Login(user, pass)) HTTP 기반 (예: POST /login)
프로토콜 TCP, HTTP/2, gRPC 등 다양 HTTP/HTTPS
데이터 형식 바이너리(Protobuf, Thrift) 등 JSON, XML 등
목적 빠르고 효율적인 서비스 간 함수 호출 웹 표준에 맞춘 자원 접근
사용 예 게임 서버, 마이크로서비스, 내부 통신 웹, 모바일 API, 외부 공개 서비스

 


7. 클라이언트와 서버의 역할

7.1. 서버

  • 게임의 핵심 로직(전투, 점수 계산, 상태 저장, 멀티플레이 동기화)을 담당
  • 모든 플레이어가 공정하고 일관된 게임 환경을 유지하도록 관리
  • 예: LoL 서버가 “내셔 남작을 레드 팀이 처치했다”는 결과를 클라이언트에 전달
공격 시각 내셔 체력
블루 1초 3
블루 2초 2
블루 3초 1
레드 4초 0 → 레드팀 처치 판정!

7.2. 클라이언트

  • 사용자의 입력(키보드, 마우스, 터치 등)을 받아 서버로 전달
  • 서버로부터 받은 결과를 그래픽, 사운드, UI로 시각화
  • 예: 공격 버튼 클릭 → 서버에 전송 → 서버가 결과 계산 → 결과를 클라이언트로 전달 → 애니메이션 출력

8. 클라이언트-서버 구조의 작동 방식

요청과 응답

  • 클라이언트 → 서버: “캐릭터를 이동시키고 싶어요!”
  • 서버 → 클라이언트: “이동 반영 완료! 위치를 갱신하세요.”

서버 하나에 여러 클라이언트가 연결되어 있으며, 한 유저의 행동이 서버를 통해 다른 유저에게도 반영된다.

장단점

  • 장점: 공정성, 데이터 일관성, 실시간 동기화
  • 단점: 서버가 다운되면 게임 불가, 운영 비용 발생

9. 다른 통신 구조

9.1. P2P (Peer to Peer)

  • 중앙 서버 없이 플레이어 간 직접 통신
  • 서버 비용 절감 가능
  • 단점: 보안 취약, 동기화 불안정, 핵/딜레이 문제

9.2. 하이브리드

  • 일부는 서버 통신, 일부는 P2P로 처리
  • 예: 전투 결과는 서버가, 모션 동기화는 P2P로
  • 많은 온라인 게임이 상황에 따라 혼합 구조를 사용