서버/서버 이론

게임서버

season97 2024. 10. 31. 15:40

 

서버란 - 영업중인 식당과 유사하다. 손님이 올 수 있도록 식당을 열고 대기중인 상태. 

 

※ 서버의 종류

 

 

1. 웹서버 (HTTP)

ㆍ 손님이 음식을 받아서 떠나면 그 후론 연락이 끊긴다. 

ㆍ 질의/응답의 형태

 

ㆍ 드물게 정보를 요청/갱신한다

ㆍ 실시간 Interaction이 필요하지 않다.

ㆍ 식당에서 손님한테 먼저 접근할 일은 없다 

ㆍ 주문 후 손님이 떠나면, 손님의 상태를 당분간 잊고 지낸다 (Stateless)

 

- 웹서버는 정말 엄청 많다 상황에 맞게 사용하면 된다. 처음부터 만드는 경우는 거의 없다고 보면 된다. -

ASP.NET (C#)

Spring (Java)

NodeJs (Javascript)

DJango,Flask (Python)


 

2. 게임서버 ( TCP Server, Binary Server, Stateful Server)

ㆍ <일반 식당>

ㆍ 서빙 징원이 와서 손님에게 물어볼 수도 있고, 손님이 추가 주문하기도 하고, 실시간 Interaction이 있다.

 

ㆍ 요청/갱신 횟수가 많다

ㆍ 실시간 Interation이 필요하다

ㆍ 언제라도 직원이 손님한테 접근이 가능해야 한다.

ㆍ 손님이 식당에 머무는 동안, 손님의 상태를 보며 최상의 서비스를 제공한다(Stateful)

 

- 게임서버는 게임에 따라 요구하는 사항이 너무 다르다. 직접 만드는경우가 많다 - 

ㆍ 최적의 프레임워크 라는 것이 존재하기 애매함

ㆍ 예를들어 초밥, 삼겹살, 호텔뷔페 등등 메뉴가 다른데 식당인테리어와 채용 직원 수가 동일할 수 없다.

ㆍ 그럼 무엇을 고려해야할까?

 

고려할 대상 게임 서버의 유사성
손님 한도(몇 명 까지 받을 수 있는지) 최대 동시 접속자
한 방에 들어갈 수 있는 손님의 일행 한도(인테리어) 게임 장르 및 채널링
직원 역할 구분(겸직 가능) 게임 로직(요리사), 네트워크(서빙), DB(결제)
직원은 몇 명을 둘지? 쓰레드 개수
요리사 / 서빙 / 결제직원 비율은 어떻게? 쓰레드 모델
주문은 어떻게 받을까? (손님이 불러서?, 벨눌러서?) 네트워크 모델
손님이 기다릴 수 있는 시간 한도 반응성(FPS,MMO RPG)
장부 및 결제는 어떻게? 데이터베이스

 

 

클라서버 vs P to P 서버

ㆍ 옛날엔 P to P 방식을 사용했었는데 요즘은 거의 사용하지 않고, 클라서버 방식을 많이 사용한다.

ㆍ 같은 클라이언트 끼리는 연결되어 있지 않고 클라이언트는 서버와만 연결되어 있다.

 

ㆍ 서버와 클라가 어떻게 소통할 것인지.... 그걸 잘 생각을 해야된다.

ㆍ 전자 방식이 데디케이트 서버. 언리얼에서 지원하는 데디서버가 있다.

 

클라 작업을 하면서 서버와 소통을 고려할만한 것들이 뭐가있을까? 

정~말 많은게 있지만 크게 5개만 보자

1. 이동 동기화

ㆍ 당연히 이동에 대한 부분은 mmo든 fps든 대부분의 게임이 중요할 것이다. 

ㆍ 내가 컨트롤하는건 내 플레이어1개이고 나머지는 다른 사람들이 하든 뭐든 할거다... 서버에서 이동에 대한 동기화만을 처리하는 그런 부분이 있어야 할 것

ㆍ 클라에서 요청을 할지..? 서버가 허락하면 움직일지??

 

2. FPS에서 슈팅을 해서 적을 피격, 출혈

ㆍ 시작되는 부분의 시작점은 어디일까? 클라이언트카 쐇다는걸 서버에게 알리면!

-> 서버에서 처리해서 누구누구가 피격을 받았다! 라는걸 다른 모든 클라이언트에게 알린다.

ㆍ 출혈 이펙트는 서버에서 해야할까?? 클라에서 해야할까?? 

-> 이런건 클라이언트가 처리해도 될거다. 그래서 게임해보면 서버 이상하면 피는 튀기는데 데미지는 안들어가고 이런 상황 본적있을것

 

 

3. MMO RPG에서 캐릭터 스텟창UI열기

ㆍ 서버에게 요청해서 이창을 열겠다할까? 아니면 서버에게 요청해서 열어달라할까?

-> 그냥 메모리에서 가지고있는 정보를 여는거니 클라에서 하면 될듯?

-> 변동되는hp나 mp같은건 서버에게 요청해서 받아낼태지만 초기값은 처음 서버에게 모두 받아왔었을 것이다.

-> 즉 스탯창 열었다는 사실은 서버에게 알릴 필요는 없다.

 

 

4. 귓말 시스템을 이용해 Season이라는 아이디를 가진 사람에게 욕설

ㆍ 귓말 시스템.. 시작은 클라에서 명령을 내리겠지?? 그럼 서버에선 특정 유저에게 타겟팅해서 해당 ID를 찾고 그 유저에게만 패킷을 보내서 처리를 하면될듯 

 

5. 배그에서 자기장이 생성됨을 알림

ㆍ 자기장이 생성되었다... 이건 서버가 주도적으로 해야겠다.  모두에게 어처피 다 뿌려줘야 하니까

 

언리얼의 데디케이트 서버를 사용하지 않으면 저런 모~~든 상황들을 다 구현해서 사용해야 한다. 하지만 온라인게임에서 일반적으로 사용하는 그런 부분들은 언리얼에서 지원하는 데디서버를 사용하면 되겠다.

 

 

 

 

 

 


서버 기초에대한 재밌는 영상

https://www.youtube.com/watch?v=YHswt4VCeJs

출처: 유튜버 코딩애플님 영상

귀에 쏙쏙박힌다

 

'서버 > 서버 이론' 카테고리의 다른 글

HTTPS  (0) 2024.01.18
HTTP와 HTTP 메시지  (0) 2024.01.18
OSI 7계층  (0) 2024.01.17
패킷과 패킷통신, TCP/IP  (0) 2024.01.17