Unreal 개강 TIL

서버의 종류와 데디케이티드 서버

ggojun 2026. 3. 13. 20:49

▶ 서버의 종류

 

P2P Server (Peer to Peer Server) 

각각의 컴퓨터가 클라이언트이자 서버인 구조. 

유명한 스팀 게임 중 "레프트 4 데드 2 (Left 4 Dead 2)"로 예를 들자면, 

나머지 3명(참가자)은 게임 회사의 메인 서버가 아니라 

방장(호스트)의 컴퓨터에 직접 연결되는데 이것이 P2P방식이다. 


상황: 만약 방장의 인터넷이 느리거나, 방장이 게임을 강제 종료(방폭)하면? 

ㄴ 나머지 3명도 게임이 끊기거나 종료됨. 

장점: 게임 회사가 비싼 서버 비용을 낼 필요가 없어서 

오래된 게임도 서비스가 종료되지 않고 계속 유지가능. 

단점: 방장의 인터넷 환경에 따라 게임 품질이 결정됨.

방장의 컴퓨터가 안 좋으면 참가중인 플레이어들이 불편을 겪는다.  

 

 

Listen Server 

클라이언트이자 서버인 방장(Host)이 있고, 

나머지 참가자(Guest)는 클라이언트 역할만 맡는 형태다. 

P2P의 일종이라고 볼 수 있음. 유명한 게임 중 마인크래프트가 있음. 

 

친구들과 함께하는 '로컬 방'이 대표적. 
방장의 컴퓨터가 곧 서버: 친구 여러명과 게임을 할 때, 당신이 게임 방을 생성했다면 당신의 컴퓨터가 서버가 됩니다.
방장에게 의존: 방장의 컴퓨터가 켜져 있어야만 친구들이 참가해서 게임을 할 수 있음.
방장이 나가면? 친구들도 게임이 끊겨버림.
방장의 유리함: 방장은 자신의 컴퓨터에서 서버를 돌리므로 렉(지연 시간)이 거의 없지만, 

나머지 친구들은 방장의 인터넷 속도에 따라 렉을 느낄 수 있음. 

 

 

P2P나 리슨이나 똑같은거 아닌가? 

ㄴ P2P는 모든 클라이언트가 서로 직접 통신하며 데이터를 공유하는 대등한 구조인 반면, 
리슨 서버는 방장(Host)이 서버와 클라이언트 역할을 동시에 수행하며 나머지 플레이어가 방장에게 접속하는 구조

결론적으로, P2P는 모든 노드가 대등하게 관리하는 구조이고, 리슨 서버는 방장이라는 '중심'이 존재하는 방식. 

 

 

Dedicated Server 

서버 역할을 혼자 담당하는 컴퓨터가 따로 있음. 

서버 - 클라이언트 구조. 대표적인 게임은 배틀그라운드가 있다. 

Dedicater Server의 실행 흐름도 

PIE(Play in Editer)를 하거나, Server.exe 실행으로 서버 프로세스 실행 
실행할때 Open {Level이름}?Listen 명령어가 인자로 전달됨. 해당 Level을 열어둠. 

이 때 Socket이 생성되어 다른 PC가 접속할수 있게끔 함.  

( Listen이라는 인자 덕분에 Socket이 생성된 것. 곧 Listen명령어가 없다면 싱글플레이 )


서로가 서로의 Player를 볼 수 있어야지 멀티플레이어임. 
GameMode는 데디케이티드 서버에만 있음. Client에는 없음. 
PlayerController는 서버에는 다 있지만 각각의 클라이언트에는 자기 것만 있다. (남의 컨트롤러가 보일 필요가 없음. )

Level에는 WorldSettings 속성이 있고, 

WorldSettings에는 GameMode GameState 정보가 있음. 

이를 통해 GameMode와 GameState 액터를 생성함. 

! 중요한 것은 GameMode 액터는 전체 컴퓨터에서 딱 한 곳(Server)에만 존재한다는 것 ! 

그래서 GameMode와 Server를 동일시해도 됨. 

 

 

클라이언트는 서버의 IP주소와 포트번호로 접속 시도. 

서버는 접속 시도하는 클라이언트에게 Level정보를 넘김. 

클라이언트도 해당 Level을 열고, 여는데 성공했다면 그 상황을 데디서버에게 알려줌. 

 

 

Level을 여는데 성공한 클라이언트 전용 PlayerState, PlayerController, PlayerCharacter가 서버에 생성됨. 

이것이 다시 클라이언트에게 복제 됨. GameState도 복제됨. 

 

 

 

이건 클라이언트(유저)가 한명 더 들어온 상황이다. 

 

 

서버는 아까처럼 레벨정보를 넘겨주면서, 

클라이언트2 전용 PlayerState, PlayerController, PlayerCharacter를 생성함. 

이것이 다시 클라이언트2에 복제됨. GameState도 복제됨. 

 

이때, 클라이언트 간의 PlayerState, PlayerCharacter도 복제되면서

게임에 접속한 클라이언트(유저)들은 서로가 보이게 된다. 

 

 

 

서버 - 클라이언트 구조의 중요한 특징 

-  클라이언트와 클라이언트 간의 통신이 불가능.

-  오직 서버와 클라이언트 사이의 통신만 가능.

ㄴ (클라이언트에서 서버를 거쳐서 다른 클라이언트로 소통을 하는 방식) 

-  이것이 RPC나 프로퍼티 레플리케이션에도 영향을 끼침.