강의

멘토링

커뮤니티

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

je son님의 프로필 이미지
je son

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동

포트폴리오 작성 후 확장 방향에 대해 질문이 있어서 글을 남깁니다

작성

·

11

·

수정됨

0

안녕하세요

저는 C# C++ 등 서버 강의를 수강해왔고 꽤 오랜 시간이 지났지만 올해 집중적으로 준비를 했습니다.

 

결론부터 말씀을 드리자면

포트폴리오를 작성 중 향후 확장 설계에 관해 궁금한 점이 생겨서 질문 글을 남깁니다.

 

현재 제 PC 사양에서 로컬 테스트와 분산 환경 테스트정도 진행했습니다. 하지만 AWS나 Azure 같은 로드밸런서를 사용하지 않아서 제한된 환경이었구요

 

워커 분배 모델에서 Idle 상태의 시간에 따라 워커를 분배하는 방식이 다르다고 알고있습니다.

게임 로직을 처리하는 워커는 상대적으로 바쁘기 때문에 코어 수만큼, IO 를 처리하는 워커는 idle 타임이 대부분이기에 코어 x 2를 배치한다라고 알고있습니다.

 

현재 저는 IO , Logic , Send 총 3가지의 워커를 나눠서 사용하고있고 추후 DB 등록에 대한것도 추가될 수 있다고 생각하는데요.

 

  1. 수평 확장으로 수백개의 Room이 돌아가게되면 busy-wait (현재 Logic 워커) Loop를 돌고 있는데 이게 cpu를 놓아주지 않는 경우가 생길 수 있을까요?

  2. 이렇게 될경우 IO Stall 현상이 나타나면 Server에선 치명적으로 다가올 수 있다고 생각합니다. 그렇다면 Logic 워커에서 Sleep, 또는 OS로 CPU 제어를 명시적으로 반환을 하도록 설계를 해야할까요?

     

  3. 지금 하고있는 고민이 맞는지 의심스러워 질문을 남기게 됐습니다. 그리고 JobQueue (Update가 들어갈)에 IO Job이 쌓여있을경우 fixed tick 기반의 서버 프레임에 변동이 발생하는데 이걸 어떻게 해결할 수 있을까요?

  4. Timer를 통한 재귀적 등록이냐, Timer에 Push하는 전용 워커를 두고 fixed tick 마다 깨어나 전체 Room에 대한 Timer 등록이냐 너무 복잡해서 질문을 남기게 됐습니다.

  5. 그리고 신입으로 상채 지원해서 서류, 과제 통과 후 면접이 잡혔는데 공채와는 사뭇 다른 면접일 것 같은데 혹시 조언은 구할 수 있을까요?

    여기는 플랫폼 서비스를 제공하는 C# 서버를 주로 다룬다고 해서 준비해야 할 개념적인 부분이 있을까요?

제가 준비하면서 고민했던 굉장히 추상적인 내용들이라 모호한 부분이 많습니다.

항상 좋은 강의를 남겨주셔서 감사합니다. 시간이 지나도 계속 찾아보게 만드는 강의여서 갑자기 찾아와 질문을 남기게 됐습니다.

답변 2

0

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

기본적으로 MMO와 고정 프레임(FPS 등)의 게임은 접근 방식이 완전히 다릅니다.
MMO는 고정 프레임이 상관 없고 오히려 일의 배분이 중요한 반면
FPS, MOBA 등의 장르는 공정성을 위해 프레임이 굉장히 중요해서
멀티쓰레드를 활용하지 않고 그냥 단일 쓰레드로 로직을 처리하게 됩니다.
강의는 MMO 기준의 설계라서 말씀하신 프레임 등이 중요하면
사실 언리얼 네트워크 코드를 살펴보시는게 아주 큰 도움이 됩니다.

신입 상채/공채의 큰 차이는 없지만
보통 공채의 커트라인이 더 높고 인사팀 등 전사가 프로세스에 참여하는 경우가 많습니다.
(최소 스펙/학벌이라거나 뭐 그런 것도 많이 보고요)

상채는 담당하는 팀에서 판별하는거라 오히려 그런 쪽에서는 너그럽고
그 팀에서 필요한 것 위주로 물어보니 사실 외부에서는 어떤 것을 물어볼지 알기 힘듭니다.
가능하면 자신감은 있되 적당히 겸손한 스탠스로, 어떤 일이든 맡기면 잘하겠다! 정도의 느낌을 주시면 됩니다.




0

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

포트폴리오 작업과 서버 성능 최적화에 관련된 깊이 있는 질문들을 주셨네요. 관련하여 몇 가지 참고하실 만한 내용을 말씀드리겠습니다.

관련 질문 URL:

  1. Listener와 Session 강의를 들으면서 정리한 개념이 맞는지 알고 싶습니다.

    • 네트워크 프로그래밍에서의 비동기 방식 및 쓰레드 관리에 대한 이해를 돕고, 효율적인 서버 설계에 대한 논의를 포함하고 있습니다.
  2. 몇 가지 질문이 있습니다!

    • 서버 코어 설계 원칙과 TCP 통신에서의 데이터 처리 방식을 이해하는 데 도움이 되는 질문과 답변이 있습니다.

질문 요약 및 방향

  1. Busy-wait와 CPU 사용량:
    Logic 워커가 Busy-wait로 인해 CPU를 놓아주지 않는 상황을 방지하기 위해 sleep을 삽입하거나 적절한 context switching을 유도하는 것이 중요합니다. 이는 CPU의 효율적 사용을 돕고 다른 프로세스도 원활히 돌아가게 합니다.

  2. IO Stall 문제:
    Logic 워커의 효율적 관리를 위해, 필요한 시점에만 기상할 수 있도록 설계하거나 우선순위를 조정하는 것이 중요합니다. OS에 명시적으로 CPU 제어를 반환하는 방식으로 CPU 사용을 조절할 수 있습니다.

  3. JobQueue와 서버 프레임 변동 문제:
    Fixed tick 기반의 서버 프레임에서 JobQueue 문제를 해결하기 위해 IO Job을 적절히 분배하여 처리하도록 설계하고, tick 간 처리 시간을 유지하도록 하는 전략이 필요합니다.

  4. Timer 사용 전략:
    Timer는 서버의 다양한 이벤트를 관리하는 핵심요소로, Timer 등록 방식에 따라 서버 성능이 달라질 수 있습니다. 모든 Room에 대해 개별 Timer를 가져갈 경우 서버 부하가 상당히 증가할 수 있기 때문에, 발생 빈도나 중요도에 따라 우선순위를 두고 깨어날 수 있는 중앙 Timer 매니저 도입도 고려해 볼 수 있습니다.

  5. 상채 면접 조언:
    면접은 각 회사마다 다르지만, 플랫폼 서비스와 관련된 경험담이나, 해당 분야의 기본기를 잘 숙지하고 있다는 점을 피력하는 것이 중요합니다. 특히 C#을 활용한 서버 설계 전략이나 비동기 프로그래밍에 관한 이해는 좋은 인상을 줄 수 있을 것입니다.

제가 제공하는 답변이 추상적인 논의와 설계 고민을 해소하는 데 도움이 되길 바랍니다. 저도 여러분처럼 개발자로서 고민했던 지점에서 출발했습니다. 언제든 질문이 있다면 주저하지 말고 올려주세요. 지식공유자와 커뮤니티의 도움이 계속되어야 할 것입니다.

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

je son님의 프로필 이미지
je son

작성한 질문수

질문하기