넷텐션의 배현직 대표님이 직접 스크린캐스트로 간단한 소셜 게임을 만드는 과정을 동영상으로 만들었더군요 

http://www.screencast.com/t/3scpMaVgb


프라우드넷 설명서와 예제 파일도 봤지만 위의 영상이 가장 쉽고 빠르게 프라우드넷을 어떻게 설명하는지 잘 보여주는 것 같습니다. 아주 강추합니다^^


이 영상을 보면 

프라우드넷을 C++을 사용하여 서버를 어떻게 만드는지, 

Unity3D에서 프라우드넷을 어떻게 사용하는지, 

프라우드넷 서버에서 DB 라이브러리를 어떻게 사용하는지 

P2P 통신을 어떻게 하는지 

등 핵심 요소를 1시간 이내의 시간으로 쉽게 알 수 있습니다.


제가 볼 때는 SDK에서 제공하는 문서나 예제 파일보다 훨쒼 좋습니다.

그리고 영상도 편집을 해서 그런지 지루한 부분 없이 스피드하게 진행되서 더 좋더군요.


참고로 영상이 여러 파일로 나누어져 있으니 각 파일을 하나씩 보면 됩니다.



저작자 표시
신고
by 흥배 2013.04.26 08:00

몇 년 전부터 게임 개발에 상용 미들웨어를 사용하는 빈도는 점점 높아가고 있습니다. 프라우드넷도 바로 이런 상용 미들웨어죠.

 

3D 게임의 경우 상용 3D 게임 엔진의 사용 비율이 점점 많이 올라가는 것 같습니다. 요즘 유명한 상용 3D 게임 엔진은 언리얼’, ‘크라이시스’, ‘Unity3D’, ‘Vision’ 등이 있습니다.

 

이런 엔진들과 프라우드넷을 같이 사용하는 경우 일부분에서 서로 통합해야 하는 부분이 발생합니다. 특히 언리얼의 경우는 처음 시작이 ‘FPS’ 게임이라서 자체적으로 네트워크 기능을 가지고 있는데 문제는 이 네트워크 기능이 대규모 온라인 게임에서 사용하기에 적합하지 않은 것이라서 언리얼 엔진을 사용할 때 네트워크 기능을 다른 걸로 교체해야 하고 이것이 꽤 까다롭다고 다른 게임 개발자들에게 여러 번 들은 적이 있습니다.

 

그래서 이런 부분에 대해서 넷텟션 측에 문의를 해보니 언리얼엔진의 경우는 기술 지원을 통해서 네트워크 기능을 프라우드넷으로 교체하는 것을 직접 지원해 준다고 합니다(즉 이 부분에 대해서 우리가 신경 쓸 이유가 없어지겠죠), Unity3D의 경우는 관련 모듈이 지금도 있어서 사용하기가 어렵지 않은데 이후에 Mono Add-In 기능을 제공하여 더 쉽게 사용할 수 있도록 해 준다고 하더군요. 그리고 크라이시스의 경우는 아직 특별한 이슈가 없어서 관련 사항이 없다고 합니다(그런데 아마 이것도 요구하면 언리얼처럼 해주지 않을까 생각합니다).

 

프라우드넷을 만든 넷텐션이 한국 회사라서 쉽게 물어볼 수 있고, 답변도 빨리 받을 수 있고, 특히 정 안되면 직접 만나서 해결할 수도 있기 때문에 다른 미들웨어에 비해(보통 대부분 외국산) 우리가 만드는 게임 코드에 통합하는 것에 대해 걱정하지 않아도 된다는 것이 장점 중의 하나일 수도 있을 것 같습니다.

 

 

저작자 표시
신고
by 흥배 2013.03.18 08:00

다른 네트웍 라이브러리를 보면 멀티 플랫폼 지원은 하는 경우가 적지 않게 있는데 프라우드넷은 기반이 한국이라서 그런지(한국의 대부분 온라인 게임 서버는 Windows) Windows 플랫폼만 지원합니다. 대신 프라우드넷은 이 부분을 멀티 랭귀지로 대응하는 것 같습니다.

 

도움말과 샘플 코드를 보면 C++ 이외에 C#, Flash, Unity를 지원하고 있습니다. 현재 한국에서 만드는 온라인 게임 중 가장 많이 사용하는 언어들이죠.

위 언어 중 C#은 서버까지 지원을 하고 Flash Unity는 클라이언트 사이드에서 사용하는 네트웍 부분만 지원하는 것 같습니다. C#으로는 서버/클라이언트 모두 만들 수 있고, Flash Unity는 클라이언트용 프로그램에서만 프라우드넷의 네트웍 라이브러리를 사용할 수 있습니다.

 

저는 현재 PC 온라인 게임만 개발하고 있어서 Flash Unity는 어떻게 되어 있는지 잘 모르겠는데 혹시 사용하고 있는 분 계시면 소감 부탁합니다^^;

 

C#은 샘플 코드를 보니 기존의 C++로 만든 것을 C++/CLI를 사용하여 DLL을 만든 후 이것을 C#에서 사용하는 방식이더군요.

도움말이 C++ C#이 나누어져 있어서 C#은 완전하게 C# dll로 만들어서 제공하는지 알았는데 제가 생각한 것과 다르더군요. 샘플 코드를 본 후 C# 도움말을 보니 C# 도움말이 C++과 같더군요.

제가 잘못 볼 수도 있는데 제가 가지고 있는 SDK로는 C#으로 서버를 개발하려면 샘플 코드를 참조하여 C++/CLI를 사용하여 직접 기존 C++ 코드를 닷넷용 DLL로 만들어야 합니다. 이 부분은 넷텐션에서 C# DLL을 제공하고 도움말도 보강하면 좋을 것 같습니다. 샘플 도움말을 보면 C++/CLI로 만드는 것이 어렵지는 않지만 저는 C++/CLI를 사용한 적이 있어서 쉬울 수 있고 어떤 사람에게는 꽤 까다로울 수도 있으니까요.
혹시나 해서 다시 도움말을 보니 제가 C++ 도움말과 혼동을 했더군요. 닷넷용 도움말도 잘 되어 있습니다. 그리고 닷넷으로 컴파일된 DLL도 제공하더군요. 다만 도움말이 대부분 Unity와 연동에 초점을 맞추고 있습니다. 그래서 Unity를 사용한다면 도움말이 많은 도움일 될 것 같습니다. 

참고로 Unity에서도 사용하는 DLL이니 아마 닷넷 버전은 3.5대 버전이지 않을까 생각합니다. 서버의 경우 궂지 3.5 버전을 사용할 필요가 없으니 최신 버전이 4.5를 사용하기 위해서 직접 빌드해서 사용하는 것이 좋을 것 같습니다.


 

한국 기준으로 보면 사실 멀티 플랫폼은 별로 의미가 없으므로 멀티 랭귀지로 대응한 것은 잘 한 것 같습니다. 다음에 멀티 플랫폼 대응까지 더 좋을 것 같습니다.

그리고 PC 온라인의 경우 클라이언트 파트는 상용 엔진을 사용하는 경우가 많은데 이른바 잘 나가는 사용엔진에서 쉽게 사용할 수 있도록 관련된 샘플도 있으면 좋을 것 같습니다.

(예전에 듣기로는 언리얼 엔진, 크라이 엔진과 협업한다고 들었는데...)

 

저작자 표시
신고
by 흥배 2013.02.15 08:00

프라우드넷을 직접 보기 전까지는 순수하게 네트웍 기능만 지원하는 걸로 알고 있었는데 도움말과 샘플코드를 보니 네트웍 이외의 기능도 있다는 것을 알 수 있었습니다.

 

제가 가장 반가운 기능이 '오류 덤프 시스템' 기능 이었습니다.

 

게임 개발을 해 보신 분들은 알겠지만 싫든 좋든 개발 도중이나 서비스 중에 꼭 프로그램이 크래쉬가 발생하는 것을 볼 수 있습니다. 이때 가장 첫 번째 해야 할 일은 크래쉬가 되었을 때 빨리 덤프 파일을 얻고 분석 하는 것입니다.

그런데 덤프 파일을 얻으려면 따로 코딩을 해야 하고 특히 발생하는 덤프 파일을 원하는 장소로 수집하는 기능도 만들어야 합니다.

다행히 이런 기능은 오픈 소스에 있기도 합니다. 그런데 영어에 익숙하지 않으면 가져와서 사용하기가 불편할 수도 있습니다.

 

그런데 프라우드넷에서 크래쉬 덤프 수집 기능을 제공해서 한글로 된 도움말을 보고 쉽게 사용할 수 있고 혹시 이상한 부분이 있을 때 물어볼 곳이 있어서 좋을 것 같더군요.

 

도움말과 샘플 코드를 보니 일반적으로 미니 덤프를 만드는 기능과 이 덤프 파일을 특정 위치로 전송하는 기능도 있었습니다. 또한 크래쉬가 발생하면 미니 덤프를 만들고 다시 자동으로 서버를 실행하는 기능도 있었습니다.

개발 도중이나 서비스 도중 서버가 죽었을 때 누군가 재빨리 재 시작을 시켜주기 어렵다면 자동으로 재 실행 해주는 기능은 편리할 것 같습니다. 다만 기능을 조금 더 만들어서 특정 시간 대에 여러 번 크래쉬가 일어나면 재 시작을 하지 않는 기능도 필요할 것 같습니다(잘못하면 미친 듯이 미니 덤프가 생기겠죠^^;)

 

네트웍 기능과는 상관 없지만 게임 개발에 있어서 꼭 필요한 크래쉬 덤프 수집 기능은 이런 기술을 아직 가지고 있지 않은 곳에서는 꼭 필요하니까 잊지 않기 바랍니다.^^ 

저작자 표시
신고
by 흥배 2013.02.07 08:00

프라우드넷을 조금씩 보고 있는데 현재까지 크게 문제 되는 것은 만나지 못했는데 약간 아쉬운 부분은 있더군요.

 

1. 빠르지 않은 콜렉션

프라우드넷 설명서를 보면 프라우드넷에서 제공하는 콜렉션에 대한 글을 볼 수 있습니다

모든 콜렉션 라이브러리를 제공하지 않고 우리가 자주 사용하는 것들을 제공하고 있고 속도도 빠르다고 나와 있습니다. 그러나 제가 테스트해 본 결과 그냥 사용하면 기존 라이브러리 보다 더 느린 경우도 있고, 옵션을 조절하면 조금 빠른 정도의 성능 밖에 나오지 않았습니다.

문의를 해보니 앞으로 성능 개선을 할 계획을 세울 거라고 하더군요. 개인적으로 혹시나 하는 마음이 있었는데 아쉬웠습니다.^^;


개인적인 생각으로 프라우드넷에서 사용하는 콜렉션은 내부에서만 사용하는 것으로 단정하고 설명서에서 이것을 사용하면 성능에 큰 도움을 준다는 느낌을 주는 문구를 진짜 개선 될 때까지는 빼는 것이 좋지 않을까 생각합니다(현재는 있어봐야 오해만 될 것 같습니다)

 



2. VS2012 미지원

제가 받은 평가판에서는 아직 2012를 지원하지 않더군요. 문의해보니 2012 버전은 다 만들었는데 아직 내부 테스트 중이라고 하더군요.

아마 프라우드넷 소스를 가지고 있는 분들은 자체적으로 빌드를 하면 되니(현재 VS2010은 지원하니까) 전혀 문제가 안되고 저처럼 lib 파일을 받는 사람에게는 아쉬운 부분이 될 것 같습니다.

VS2012도 정식 버전이 출시한 지 8개월이 되어 가고 이전부터 RC나 베타, RTM 등이 나와서 입수는 빨리 할 수 있으니 최신 버전을 빨리 지원해 주면 좋을 것 같습니다

 

저작자 표시
신고
by 흥배 2013.02.06 08:00

온라인 게임 서버 개발을 10년 이상하다 보니 여러 네트웍 라이브러리를 직접 개발하거나 동료가 만든 것을 사용해 보았지만 아직도 부족함이 느껴져서 계속 공부 중인데 '고기도 먹어본 놈이 잘 먹는다'라는 말처럼 좋은 네트웍 라이브러리를 만들려면 좋은 걸 만져봐야 어떤 것이 좋은지 쉽게 알 수 있기 때문에 요즘 넷텐션의 'ProudNet' 이라는 한국산 네트웍 엔진을 조금씩 보고 있습니다(평가판이라 길게 볼 수 없는데 요즘 시간이 부족하네요^^;).

 

온라인 게임 업계의 프로그래머라면 아마 넷텐션의 'ProudNet'은 익히 들어봐서 새롭지는 않으리라 생각합니다. 보통은 막강한 P2P 통신으로 많이 알려져 있죠.

이전 회사에서 캐주얼 P2P 게임을 만들 때 조언을 얻기 위해 다른 회사의 P2P 게임을 만드는 분들에게 물어 보면 적지 않은 분들이 직접 만드느라 시간 낭비하지 말고 ProudNet을 사서 사용하는 것이 더 좋다는 말을 자주 들었습니다. 특히 이미 직접 P2P 네트웍을 구현해서 게임을 서비스해 본 분들일 수록 강력하게 추천을 하였습니다.

 

P2P 게임을 만들어 보지 않은 분들은 아마 P2P 통신이 어떻게 되는지 좀 아리송한 분들이 많으리라 생각합니다. 예전에 저도 P2P 게임을 만들어 보기 전까지는 관련 문서를 봐도 특별한 것이 없고, P2P 게임을 개발하는 분들에게 물어보면 별 다른 것 없다고만 하고, 관련 기술을 소개하는 책도 거의 없어서 저에게는 꽤나 궁금한 기술이었습니다.

그런데 직접 P2P 게임을 개발하면서 부딪혀보니 왜 그런지 좀 이해할 수 있었습니다.

 

P2P 통신 프로그래밍을 아주 간단하게 말하면 유저의 컴퓨터끼리 UDP라는 프로토콜을 사용하여 서로 통신을 하는 것으로, 보통 유저의 컴퓨터는 공유기에 물려 있는 경우가 많아서 4가지 타입의 공유기에 맞추어 서로 UDP 통신을 할 수 있도록 하는 것(홀펀칭)이라고 말 할 수 있습니다.

그래서 네트웍 기술측면을 보면 UDP 통신과 4가지 공유기 타입에 따른 홀펀칭이 거의 대부분입니다.

 

 

 

P2P 게임을 만들어 보면 현실의 네트웍이 이론에 맞게 동작하지 않는 것과 게임과의 연동 부분 때문에 여러 문제를 겪게 됩니다. 제가 P2P 게임을 개발하면서 알게 된 문제는 다음과 같습니다.

 

1. 정해진 규약과 다른 동작을 하는 공유기(특히 해외).  

분명 공유기의 NAT 타입이 Address-Restricted인데 Stmmetric 처럼 동작하는 경우, 공유기 자체적으로 바이러스 방어 기능을 가지고 있어서 우리가 하는 UDP 통신을 바이러스로 판단하고 막아버리기는 경우.

 

2. 릴레이 구현

필연적으로 P2P는 일부 NAT 타입의 공유기에 물려 있는 유저들은 직접 통신을 할 수 없어서 서버를 통한 릴레이 통신이 필요합니다. 그래서 유저 컴퓨터끼리 통신을 못하는 경우 서버를 통한 릴레이가 자연스럽게 이루어져야 합니다.

 

3. 게임 로직에 좌우되는 P2P 통신

제가 P2P 통신을 구현할 때 가장 실수한 부분이 이 부분입니다. 경험이 없다 보니 최대한 릴레이를 통하지 않고 직접 통신이 되게 하는 부분에 집중하다 보니 게임 로직과 P2P 통신이 서로 연결되게 구현을 하여 개발 도중 여러 번 게임 로직을 구현하는 사람이 P2P 통신을 위한 준비 단계를 무시하고 구현하여 잘 되고 있다고 생각했던 P2P 통신이 안되던가 게임 시작이 실패하는 경우가 발생했습니다. 최소한 게임 로직과 P2P 통신을 완전하게 알고 있지 않는 이상 게임 로직에 독립적이지 않는 P2P 통신은 언제나 문제가 발생해서 괴롭힙니다.

 

 

위의 문제에서 가장 골치 아프고 해결하기 까다로운 것이 1번이라고 생각합니다. 게임 개발에는 많은 시간이 필요하고 언제나 개발 시간이 부족합니다. 그래서 많은 공유기를 가져와서 테스트 하고 각 공유기에 맞게 홀펀칭이 되도록 구현할 할 수 없습니다(공유기 구하기도 어렵죠). 그에 비해 ProudNet은 공유기 타입뿐만이 아닌 공유기 기계 자체를 조사하여 각 공유기에 맞게 최적화된 홀펀칭을 한다고 들었습니다. 이것 때문에 저처럼 게임 개발을 하고 있으면 ProudNet과 같은 품질을 내기가 어렵습니다. 현실적으로 ProudNet과 비슷한 품질의 P2P 통신을 하려면 ProudNet을 사서 사용하는 것이 가장 현실적이라고 생각합니다(경험과 시간적인 측면을 보면).

 

ProudNet을 보니 범용 네트웍 엔진에 맞게 P2P 통신은 게임 로직과 독립적으로 구현되어 있어서 제가 격은 문제를 처음부터 피할 수 있더군요.

 

 

지금은 P2P 게임을 만들지 않고 있는데 다음에 다시 만들게 된다면 저는 가능한 ProudNet을 사용하여 P2P 개발에 소요되는 시간을 절약하고, 개발할 때나 게임이 서비스 될 때에 발생하는 문제를 피하고 싶습니다.

ProudNet을 사용하면 최소한 내가 만든 것 이상의 P2P 통신을 할 수 있다면 신뢰가 있고, 혹 문제가 생기더라도 ProudNet을 만든 넷텐션에 문제를 넘겨서 빠르게 문제를 해결하고 저는 게임적인 부분에 더 집중하고 싶습니다.

 

 

 

ProudNet 평가판을 받아서 도움말을 보니 P2P로 유명하지만 P2P 이외의 기능들 중 흥미로운 부분들이 많아서 P2P보다는 다른 기능들을 전체적으로 흩어 보았습니다(사실 P2P 부분은 제가 경험이 있어서 그런지 필요하다고 생각하는 부분들이 다 있어서 더 특별히 볼 것이 없더군요^^).

 

그냥 문서나 코드를 보기만 하면 제대로 남는 것이 없을 것 같아서 다음에는 제가 본 ProudNet의 기능들 중 눈에 띄는 것을 간단하게 정리하여 공유하도록 하겠습니다^^

 

저작자 표시
신고
by 흥배 2013.01.25 08:00
| 1 |