서버 구조
프로토콜
프로토콜이란 컴퓨터나 전자 기기 간에 정보를 교환할 때 따르는 규칙의 집합을 말한다. 통신 규약이라고도 불리며, 서로 다른 컴퓨터들이 원활하게 통신하기 위해 반드시 지켜야 하는 약속이다. 클라이언트와 서버가 통신하려면 반드시 동일한 프로토콜을 공유해야 한다.
그렇다면 이러한 의문이 생길 수 있다.
“컴퓨터는 어차피 0과 1로만 이루어진 기계 아닌가? 이미 그들만의 규칙으로 동작하는데, 굳이 공통된 규칙이 추가로 필요한가?”
이에 대한 답은 맞지만 동시에 틀리다이다.
컴퓨터는 분명 0과 1로만 데이터를 주고받는다. 그러나 그렇다고 해서 아무런 약속 없이도 서로 의미 있는 대화를 나눌 수 있는 것은 아니다.
예를 들어 다음과 같은 비트열이 있다고 가정하자.
01001000 01101001
이 비트열을 ASCII 문자 인코딩 규칙에 따라 해석하면 문자열 "Hi"가 된다.
72는 ASCII기준으로 'H'이다.
01101001 26 + 25 + 23 + 20 = 105
105는 ASCII기준으로 'i'이다
이처럼 비트열 자체는 단순한 데이터일 뿐이며, 어떤 규칙으로 해석하느냐에 따라 의미가 달라진다.
만약 이 데이터를 받은 컴퓨터가 ASCII가 아닌 다른 규칙으로 이 비트열을 해석한다면, 전혀 다른 결과가 나오거나 의미를 이해하지 못할 수도 있다.
바로 이러한 문제 때문에 컴퓨터들은 프로토콜이라는 공통된 규칙, 즉 자신들만의 “언어”를 사전에 정해두는 것이다 .
이를 인간의 언어에 비유해 보면 더 쉽게 이해할 수 있다.
인간에게 있어 "소리"는 그 자체로는 "언어"가 아니다.
우리는 소리를 일정한 규칙에 따라 조합하여 "한글", "영어"와 같은 언어를 만든다. 이 언어 규칙을 공유하고 있기 때문에 서로의 의사를 정확히 이해할 수 있다.
그런데 만약 언어라는 규칙이 적용되지 않은 단순한 소리만으로 의사를 전달하려 한다면, 상대방은 그 소리를 들을 수는 있겠지만 그 의미를 정확히 이해하기는 어려울 것이다.
컴퓨터 사이의 통신도 마찬가지다. 0과 1은 그 자체로는 의미 없는 데이터이며, 프로토콜이라는 규칙을 통해서만 비로소 의미 있는 정보 전달이 가능해진다.
따라서 컴퓨터들은 원활한 통신을 위해 프로토콜이라는 공통된 언어 규칙을 반드시 필요로 한다.
클라이언트
클라이언트는실제로 화면에 게임을 보여주고, 사용자의 키보드/마우스/터치 입력을 받아 서버로 전달한다. 서버에서 받은 결과를 화면에 그래픽이나 사운드로 표시한다. EX) '캐릭터 이동', '아이템 사용' 버튼을 누른다. 정보를 서버에게 보내고 결과를 받아 처리한다.
컴퓨터를 사람에 비유한다면 "프로토콜"은 "한글"이나 "영어"와 같은 언어이며, 0과 1로 이루어진 비트열은 "소리"와 같다.
그렇다면 클라이언트는 무엇인가?
"프로토콜"이 언어이면, "클라이언트"는 "사람"에 비유할 수 있다.
클라이언트는 사용자의 의사를 "입력장치"를 통해 받는다. 그리고 그 받은 값을 비트열로 변환하여, 서버로 보낸다.
즉, 자신의 의사를 언어로 표현하고 전달할 수 있는 존재라는 점에서 사람과 유사하다.
서버
서버는 게임의 핵심 로직을 담당한다. 점수 계산, 상태 저장, 멀티플레이 동기화와 같은 중요한 처리를 수행하며, 여러 명의 플레이어가 동시에 접속하더라도 공정하고 일관성 있게 게임이 진행되도록 한다. 예를 들어 공격을 받았는지, 아이템을 획득했는지와 같은 최종 판단은 서버가 담당한다.
"프로토콜"은 언어이며, "클라이언트"는 사람이다.
그렇다면 서버는 무엇인가?
서버는 "사회"에 비유할 수 있다.
사회는 개인의 의사가 아닌, 공동의 규칙을 기준으로 판단이 이루어진다.
예를 들어, 어떤 개인이 범죄를 저질렀다고 가정해보자. 그렇다면 사회는 이 범죄자를 그대로 방치하는가?
그렇지 않다. 그들은 그 범죄자를 법의 테두리 안에서 심판한다.
왜 이러한 판단이 필요한가?
만약 범죄를 저지른 개인을 그대로 방치한다면, 그 상황을 인지한 다른 사람들 역시 동일한 행동을 반복할 가능성이 커지기 때문이다. 이는 사회 질서를 무너뜨리는 결과로 이어진다.
이처럼 사회 질서를 유지하기 위해 사람들 사이에 정해진 규칙이 ‘법’이라면, 게임에서 이러한 역할을 수행하는 것이 바로 서버이다.
서버는 모든 클라이언트에게 동일한 규칙을 적용하며, 각 클라이언트의 요청이 유효한지 판단하고 그에 따른 결과를 결정함으로써 게임의 공정성과 일관성을 유지한다.

HTTP/HTTPS
- 주로 웹에서 쓰임
- 요청/응답 구조가 명확하여, RESTT API 등을 통해 데이터 전송


TCP/UDP
- TCP는 파일을 다운로드 하는 것과 같음(중간에 끊기면 다시 받아야 함)
- UDP는 중간에 끊겨도 알아서 계속해서 재생을 이어나감(중간에 끊겨도 상관X)
- 게임에서는 실시간성이 중요한 경우 UDP를 사용하기도 함
- 안정성이 중요한 경우에는 TCP

기타
- WebSocket(브라우저 실시간 통신)
- RUDP(신뢰성을 높인 UDP)
- ....
위 이야기는 이후 면접관련 준비할 때 자세히 공부해야 된다.
게임 서버의 구조
1. 단일 서버 : 단 하나의 서버가 모든 역할을 단독으로 처리하는 방식이다.
2. 분산 서버 : 여러 서버가 각각 역할을 나누어 처리하는 방식이다.


게임 개발 과정 알아보라는 과제가 1-3 강의 영상을 보고 했으면 더 편했을 거라는 사실을 깨달았다...
< 게임의 전체적인 방향성(=장르 선택) >
의사결정권자
> PD(팀의 전반적인 헤드)
> TD(기술팀의 헤드) or TL이라고 불리기도 함
> AD(아트팀의 모든 방향성을 결정)
> 기획자(스토리 & 레벨 디자인, 규칙 & 재미 요소 설계, 협업)
> 아트팀
> 프로그래머(클라이언트, 서버 프로그래머)
<게임 개발 순서>
기획 단계 > 디자인 단계 > 개발 단계 MVP(최소 구현 사양) > QA(테스트)
기획 단계 > 디자인 단계 > 개발 단계 MVP(최소 구현 사양) > QA(테스트)
기획 단계 > 디자인 단계 > 개발 단계 MVP(최소 구현 사양) > QA(테스트)
기획 단계 > 디자인 단계 > 개발 단계 MVP(최소 구현 사양) > QA(테스트) (완성될 때까지 무한 반복)

!!라꾸라꾸 침대 챙겨가자!!

에디터 환경

게임 플레이 버튼

나갈 때는 ESC버튼을 누르면 된다.
뷰 포트

게임의 맵(레벨이라고 불림)

액터
레벨 안에 있는 수정 가능한 모든 것들은 액터라고 부름

액터 배치할 때 4분할로 보면서 배치하면 예쁘게 배치 가능

4분할로 보는 법 :
뷰 포트 내부에 있는 메뉴 클릭 > 레이아웃 클릭 > 4채널 클릭

뷰포트 이동 속도 조절은 마우스 우클릭 누른채로 마우스 휠로 조정 가능

액터 트랜스폼
기즈모라고 불림

Ctrl + Alt + 드래그
드래그 영역 안에 있는 모든 액터들이 선택이 됨

'[Unreal엔진] BP > 미정' 카테고리의 다른 글
| 25.12.04_공부 (0) | 2025.12.04 |
|---|---|
| 25.12.02_공부 (0) | 2025.12.02 |
| 25.11.28 (0) | 2025.11.28 |
