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

사과일광욕님의 프로필 이미지

작성한 질문수

이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해

1강 언리얼 네트웍 멀티플레이어 프레임웍 개요

멀티플레이어 프레임워크가 서버프로그래밍의 상위호환인가요?

작성

·

220

0

포트나이트까지 언리얼 멀티플레이어 프레임워크로 제작할 수 있다면 서버개발자는 굳이 필요가 없을거같은데

언리얼의 멀티플레이어 프레임워크를 사용하면 서버 개발자를 대체할 수 있는건가요?

서버 개발자로 근무중인데 강의를 듣고 커리어 측면에서 궁금한 점이 생겨 질문드립니다

답변 1

5

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

안녕하세요.
좋은 질문입니다. 이에 대한 개인적인 생각을 한번 정리해봅니다.
서버프로그래밍의 학습 패러다임이 과거와 현재가 많이 달라지고 있습니다. 번호로 정리하면 다음과 같습니다.
1. 과거 국내 게임 서버 프로그래밍은 PC 플랫폼 MMORPG가 대부분이다보니, 서버프로그래밍이란 대부분 IOCP로 통칭되는 비동기처리와 쓰레드 처리 및 패킷 통신을 극대화한 최적화 기술이 주를 이루고 있었습니다.
2. 또한 슈터장르로 대표되는 소규모 실시간 대전 게임도 한 켠을 차지하고 있었습니다. 실시간 대전 게임의 경우에는 MMORPG와 같은 극단적인 최적화보다 레이턴시(랙) 상황에서 정확한 판정을 내려주는 기술이 중요했지요.
3. 그런데 모바일 시대로 들어오면서부터 실시간 대전 없이 서버에 상태만 보관하고 (웹)API로 핸드폰에 동기화시켜주는 것만으로도 많은 수익을 낼 수 있게 되었습니다.
따라서 서버 프로그래밍이라 하면 크게 세 가지 종류의 개발이 있다고 생각합니다.
난이도로 따지면 1번 > 2번 > 3번이라고 볼 수 있지만, 모두 각각의 노하우가 필요한 부분이며, 사실 자체 서버 개발도 중요하지만, 요즘은 AWS와 같은 클라우드 인프라를 디자인하고 최적화하는 기술이 더욱 중요해졌습니다.
대한민국의 시장 큰 부분을 MMORPG 장르가 차지하다보니, 학습자에게는 MMORPG를 만들어 서비스한다는 로망이 있는데, 사실 이런 장르를 개인이 만든다는 건 불가능에 가깝다고 생각합니다. 개인이 특정 기술 스택을 열심히 공부할 순 있지만, 실제 클라우드 인프라에서의 서비스를 생각한다면 관리 비용과 시간이 너무 많이 들기 때문이죠. 이제 현대의 서버 서비스 아키텍처는 클라우드 인프라만 여러 명이서 담당해야 할 정도로 복잡해졌습니다. 또한 모바일 게임 산업이 더 커짐에 따라 MMORPG와 같은 자원 효율을 극대화한 최적화 기술이 모든 게임에 사용될 필요는 없습니다. 배틀그라운드, 포트나이트, 원신 사례만 봐도 MMORPG가 아님에도 정말로 많은 돈을 쓸어담고 있죠.
저도 MMORPG를 만들겠다는 학생을 학교에서 종종 보곤 하는데 MMORPG의 개념도 잘 모르는 경우가 많더군요. 정리하면 RPG와 MMO를 분리해 생각하면 좋을 것 같습니다. MMO를 만든다고 RPG가 되는건 아니고 RPG가 꼭 MMO이어야 할 일은 없으니깐요. 하나만 제대로 만들어도 충분합니다.
언리얼 엔진이 제공하는 네트웍 멀티플레이어 프레임웍은 2번에 해당합니다. 언리얼 엔진이 제공하는 네트웍 프레임웍은 주로 8:8 대전의 형태인지라 MMORPG 서비스에 사용할 수 없어, 과거 국내 회사들은 언리얼의 네트웍 기능을 걷어내고 자체 제작한 MMORPG에 맞는 네트웍 시스템을 탑재하곤 했습니다.
그런데 언리얼 4버전 중반대부터 에픽 게임즈가 직접 파라곤을 서비스하면서 언리얼 엔진의 네트웍 구조가 점점 좋아지기 시작합니다. 그리고 4버전 후반대에서는 100명 규모의 배틀로얄 장르를 소화할 수 있도록 구조가 개선되는데요, 이 시기에 대표적으로 배틀그라운드와 포트나이트가 서비스되기 시작했습니다. 다만 해당 서비스들은 언리얼 엔진의 기능을 개발팀이 자체적으로 최적화를 시켰습니다.
에픽게임즈는 포트나이트 서비스의 노하우를 반영하기 위해 4버전 후반대에서는 리플리케이션 그래프(Replication Graph)라는 네트웍 최적화 기술을 언리얼 엔진에 탑재하고, 5버전에서는 아이리스(Iris)라는 새로운 네트웍 최적화 기술을 추가했습니다. 그런데 버전이 올라갈 때마다 계속 바뀌다보니 이를 그대로 사용해 서비스할 수 있는가에 대해서는 검증되지 않은 면이 있습니다. ( 저는 그대로 사용할 수 있다에 좀 부정적입니다. )
아무튼 여기까지는 서버 개발의 전반적인 흐름입니다. 이제 언리얼이 제공하는 기본 네트웍 멀티플레이어 프레임웍에 대해 간단하게 설명해보겠습니다.
MMORPG의 영향으로 인해 과거 서버 프로그래밍 교육은 한 컴퓨터가 제공하는 리소스를 극대화하는 방법에 치중되어 있었던 상황입니다. 서버 개발에 입문하면 소켓으로 채팅부터 만들고 TCP/UDP를 논하지만, 사실 이런 로우레벨에의 개발은 전자공학에서 직접 납땜해 반도체 만드는 것과 비슷하다고 생각합니다. 직접 원리를 알면 좋지만 실제로 현업에서는 사용되진 않는다는 것이죠. 이미 많은 효율적인 네트웍 라이브러리, 상위 개념으로 추상화한 언어, 클라우드 인프라에서 제공하는 각종 서비스들이 제공되고 있는 상황입니다.
모두 다 공부하면 당연히 좋지만, 한정된 시간이라면 로우레벨에서의 컴퓨터 자원 활용에 신경쓰기보다, 누군가 만들어준 로우레벨 통신 라이브러리를 활용해 게임 플레이 중에 한정된 네트웍의 자원을 효율적으로 분배하고 모든 참여자가 납득할 수 있는 정확한 판정 시스템을 고민하는 것이 좋은 서버 프로그래머를 위한 지름길이라고 생각합니다.
제 파트3 강의에서 설명하는 언리얼 엔진의 기본 멀티플레이 프레임웍만 보더라도 내가 만들 게임에 맞춰 고민하고 커스터마이징 할 요소가 많음을 볼 수 있습니다. 너무 로우레벨만 탐색하면, 큰 숲을 못 보는 경우가 많다보니 저는 학생들에게 언리얼을 굳이 안사용하더라도 언리얼 엔진의 네트웍 멀티플레이 구조는 꼭 공부해보라고 권장하고 있습니다. 정말 정석적으로 배워야할 게 많습니다.
이후에는 제 강의에서 제공하진 않지만 데디케이티드 서버를 AWS에 올리고, 클라우드 인프라 및 데이터베이스를 공부하는 것을 경험해보라고 권장하고 싶네요.
마지막으로 질문주신 부분에 대한 답변입니다.
현재 언리얼의 기본 네트웍 멀티플레이어 프레임워크는 소규모 개발팀에서 사용하기에는 완성된 상황이라 생각합니다. 스팀에서 꽤 흥행한 롱빈터나 팰월드의 사례를 봤을 때 소규모 개발팀이 언리얼 엔진의 기본 기능을 잘 활용해 실제 흥행한 서비스로 연결한 것으로 보여집니다. 로우레벨을 몰라도 언리얼이 제공하는 통합된 프레임웍에서 다른 엔진에 비해 소규모 인원이 보다 효율적으로 개발 및 서비스가 가능할 것으로 생각합니다.
먼저 장르와 네트웍 플레이 방식을 결정해야 합니다. 너무 많은 인원의 수용은 어렵습니다. 그리고 언리얼 프레임웍이 모든 것을 다해주진 않기에, 수용 인원이 많을 수록 게임에 맞게 커스터마이징이 필요하며, 클라우드 인프라에서 안정적으로 서비스를 운용하는 것은 또 다른 문제이기 때문에 서버 프로그래머는 반드시 필요하다고 생각합니다.

우와아아 엄청 자세하고 친절한 답변 감사합니다