본문 바로가기

Unreal Engine

[언리얼 엔진/서버] 온라인 서브시스템

[언리얼 온라인 서브 시스템만 알고싶다면 아래로]

 

제대로 된 온라인 이야기를 하기 위해선 IP에 대한 이야기가 필요하다. 보통 cmd를 열어서 ipconfig(리눅스는 터미널에 ifconfig)를 치면 굉장히 많은 정보가 뜨게 된다. 그 중 주목해야 할 것은 바로 IPv4(리눅스는 inet)이다. 

 

이 IP 주소는 '로컬' IP 주소이다. 그리고 이것은 로컬 네트워크 라우터에서 지정해 준 IP이다. 대부분의 네트워크 라이터들은 각기 다른 디바이스마다 내부 IP 주소를 할당하고 이것들은 디바이스들의 연결 순서에 따라서 변경될 수 있는 주소값들이다.

그리고 이 주소들은 이 디바이스와 같은 라우터에 이터넷 선이나 WiFi 등등으로 연결된 로컬 네트워크로 연결된 다른 디바이스만이 볼 수 있는 주소들이다. 즉 이 말은 로컬 네트워크 밖에 있다면 볼 수 없는 것들이다. 

 

그리고 이 라우터보다 더 상위로 올라가면 ISP(Internet Service Provider)가 나온다. 우리나라로 따지면 SK텔레콤, LGU+ 그리고 KT같은 회사이다. 즉 내가 인터넷에 연결하기 위해서는 이 라우터들이 ISP와 연결이 되어있어야 가능하다는 것이다. 

이 ISP들은 또 각 라우터마다 외부 IP 주소를 할당해준다. 즉 인터넷으로 오는 모든 정보들은 먼저 퍼블릭이나 외부 IP 주소로 이동한 뒤, 각각의 내부 또는  로컬 IP로 이동을 하는 식으로 진행된다.

 

보통의 게임들은 단순히 로컬끼리 돌지 않고 전 세계의 사람들과 인터넷으로 연결이 되게 된다. 즉 상대방과 연결을 하기 위해선 상대방의 외부 주소를 알고 있어야 한다는 것이다. 하지만 이것은 바람직 하지 않다. 상대방이 알려주지 않는다면 그 IP에 접근할 수 없기 때문이다. 그리고 보통 보안 문제 등등으로 잘 알려주지도 않는다.

 

그럼 이런 문제를 해결하며 외부 IP 주소로 접근하거나 할 수 있게 만들어줄 것인가? 해결법은 다양하다.

 

어떨 땐  자체 데디케이티드 서버를 생성한 뒤, 내가 로그인을 하면 나는 이 IP를 가지고 있는 서버 리스트 중 하나를 선택한다. 그럼 나는 그 사람과 연결되는 식인 것이다. 문제는 이런 데디케이티드 서버는 구축에 많은 시간이 걸리며, 동시에 많은 자금을 요구한다는 단점이 있어 큰 회사가 채택하기 좋은 방식이다. 그 이유는 서버 구축을 하면 할수록, 더 많은 서버와 저장소 그리고 더 많은 전력을 요구하기 때문이다.

데디케이티드 서버

다른 방법은 하나의 클라이언트가 리슨서버를 담당하며, 다른 유저가 접속하는 방식이다. 하지만 어떻게 IP 주소를 알아낼 것인가라는 문제에 다시 빠진다. 방법은 하나의 서버를 두고 그 서버에 로그인 하면, 다른 플레이어와 연결을 할 수 있게 하는 방식이다. 즉 중간에 호스팅만 담당하는 서버를 두는 방식인 것이다. 그리고 이 호스팅 서버는 보안과 친구 시스템만 두면 되는 방식인 것이다.


이제 IP에 대한 이야기를 열심히 했으니 언리얼이 제공하는 온라인 서브시스템에 대해 알아보자. 

 

위에서 말한 리슨서버를 만드는데에 있어 편의성을 제공하는 대표적인 호스팅 회사는 스팀, 에픽스토어, 엑스박스, 페이스북 그리고 굉장히 다양한 회사가 존재한다. 스팀의 경우에도 플레이어 연결, 그리고 친구 추가 등등의 다양한 자체 코드를 제공하고 있는 편이다.

 

그렇다면 이에 대한 제반 코드들을 모두 알아둬야 하는 것인가? 그럼 이렇게 열심히 만들었을 때 이 게임을 엑스박스에 팔고 싶다면? 굉장히 짜증나진다. 그렇기 때문에 언리얼 엔진은 서비스 연결에 필요한 베이스 코드들을 제공하고 있다. 그리고 이 단순한 베이스 코드로 대부분의 서비스 연결에 필요한 추상 기능들을 제공하고 있다. 이것이 바로 온라인 서브시스템이다.