인프런 커뮤니티 질문&답변

아휘님의 프로필 이미지
아휘

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

유니티 연동 #4

강의에서 만드신 코드들에 대한 짧은 질문

작성

·

43

0

안녕하세요.

본인은 게임 클라이언트 개발자를 희망하지만,

인디게임 수준의 서버는 직접 만들기 위해

본 강의를 3회독 하는 중입니다.

 

강의해 주신 코드들은

예를들면 Listener 클래스를 직접 만드셨는데,

TcpListener이란 클래스가 있더라고요.

대형 게임 회사는 자체적으로 서버를 구축하니까

Listener클래스를 비롯한 모든 서버를 최대한 하드코딩 하는건가요?

TcpListener같이 구현되어있는 것들을 사용하지 않는 이유가 있을까요?

물론 Listener 클래스를 직접 만들면서 지식이 깊어지고 그런건 매우 좋습니다. 하지만 제가 배우고 작성하는 클래스들의 완성의 수준을 가늠잡을 수 없어 불안합니다.

 

그래서 일부 클래스들은 TcpListener 같이 이미 나와있는 클래스들을 섞어가며 사용해보고 싶은데 이런 부분에서 강사님 의견이 궁금합니다.

답변 2

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

네 TcpListener를 이용하셔도 물론 되지만,
다른 방법에 비해 속도가 느리다는 단점이 있습니다.
하지만 어차피 엄청 동접이 늘어나기 전까진 티가 나지도 않고
실제로 쓰레드 배분이 더 중요한 이슈라서
네트워크를 가볍게 넘어가려면 그렇게 하셔도 됩니다.

C#으로 서버를 작업할 때 대략 4가지 방법이 있긴 한데요.
https://www.cnblogs.com/gaochundong/p/csharp_tcp_service_models.html#apm
중국어지만 번역해서 보시면 도움이 됩니다.

그 중에서도 개인적으로 AsyncEventArgs 방식을 선호하는 이유는
실제로 흐름이 C++ IOCP 서버를 작업할 때와 매우 유사하기 때문입니다.

0

안녕하세요, 인프런 AI 인턴입니다. 아휘님.

질문해주신 내용과 관련하여 강의에서 다룬 서버 구현 및 직접 클래스 작성에 대한 고민은 많은 분들이 겪는 과정입니다. 먼저, 인디게임 개발 과정에서 직접 서버를 짜는 것은 아주 좋은 학습 경험을 제공합니다. 이를 통해 서버의 동작 원리를 이해하고, 다양한 문제 해결 능력을 키울 수 있습니다.

Listener 클래스를 직접 만드는 이유

대형 게임 회사에서는 종종 자체적으로 서버를 구축하는데, 이는 그들이 특정 요구사항에 맞춤화된 솔루션이 필요하기 때문입니다. TcpListener 같은 기본 제공 클래스는 일반적인 사용 사례에 맞춰 만들어져 있으나, 대형 시스템에서는 성능 최적화, 보안 강화, 확장성 등 다양한 이유로 커스터마이징이 필요할 수 있습니다.

이미 구현된 클래스를 사용하지 않는 이유

  • 학습 목적: 여러분께서 강의에서 직접 클래스를 만드는 과정은 이러한 시스템의 내부 작동 방식을 깊이 이해하는 데 도움을 줍니다. 특히 네트워크 프로그래밍은 이해하기 어려운 부분이 많기 때문에 여러 번 반복해서 학습하는 것이 중요합니다.
  • 맞춤형 기능 필요: TcpListener는 일반적인 TCP 연결을 처리하는 데 있어 기본적인 기능을 제공하나, 게임 서버처럼 특정 패턴이나 요구사항이 있는 경우, 직접 구현하여 세세한 점까지 제어할 수 있습니다.

이미 제공된 클래스의 활용

아휘님처럼 TcpListener를 혼합하여 사용하는 것도 좋습니다. 이미 검증된 클래스를 사용하는 것은 코딩 생산성을 높이고, 기본적인 구현 과정을 단축시키는 데 큰 장점이 있습니다. 이는 상용화된 프로덕트나 빠른 프로토타입 작성 등 실용적인 상황에서 유용할 수 있습니다.

관련하여 비슷한 질문이 있었던 게시물을 추천드립니다:
- 강사님 질문이 있습니다: 게임 개발 과정에서 서버 코드 적용 사례와 고민에 대한 이야기.
- Unity Server 관련해서 질문이 있습니다.: P2P 모델과 Client-Server 모델의 차이와 서버 구축에 대해 논의한 질문입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

아휘님의 프로필 이미지
아휘

작성한 질문수

질문하기