구글 태그

2006년 9월 15일 금요일

RakNet의 장단점..

회사에서 진행하는 P2P 모델의 프로젝트에 네트워크 라이브러리로 RakNet을 사용했는데, 사용하면서 느낀 점을 정리해볼까 합니다. 프로젝트에 RakNet을 채택할지 여부를 고민하고 계시다면 도움이 될지도 모르겠네요.

우선 장점부터 볼까요? 이 글을 쓰는 시점에서 RakNet은 버전 2.519까지 나와있는데, 핵심 기능이라고 할 수 있는 reliable UDP는 좋다고 말할 수 있습니다. 상당히 안정화가 됐다고 할 수 있죠. 저는 2.4 버전부터 썼는데, 그때까지만해도 약간 문제가 있었습니다.(P2P 모델에서 cross-connection bug 같은건 꽤 문제가 되었죠) 하지만 2.5대로 넘어오면서 상당히 안정화가 됐습니다. 또 확장성도 괜찮은 편입니다. 메시지 기반의 plugin을 작성하며 기능을 확장하는 방식인데, 인터페이스도 간결하고 모듈간에 간섭도 없어서 깔끔하게 기능을 추가할 수 있습니다.

그렇지만 단점이 없는건 아닙니다. 개발자인 Rak'kar가 MMOG 개발에 뜻을 두고 있어서, RakNet의 개발 방향은 점차 UDP 기반의 MMOG 네트워크 엔진이 되어가고 있습니다. C/S에 적합한 기능으로 발전하고 있어서 P2P에 맞는 방향으로는 기능추가가 미진하다는 뜻이죠. 또 NAT 문제에 취약합니다. Plugin 형태로 홀펀칭이 들어있긴 하지만 많이 미흡하고, 위상차가 다른 NAT에 적절히 대응하지 못합니다. 이러한 부분에 대해서는 추가 개발이 필요한데, RakNet이 네트워크 상의 다른 컴퓨터와의 연결을 인식하는 방법상 깔끔하게 처리하기가 어렵습니다.

그렇다면 RakNet은 추천할만한 라이브러리일까요? 제 경우엔 plugin 디자인도 RakNet 샘플이 제공하는 것과 유사하게 구성하면서 전반적으로 RakNet의 디자인 방식을 최대한 따르도록 개발을 했는데, 이러한 방식으로 만들면 개발 속도 면에서 상당한 이득을 얻을 수 있습니다. Reliable UDP를 개발하기가 귀찮다면 그냥 코어부분만 사용해도 괜찮지만, 그렇게 되면 개발 속도면에서는 큰 이점을 갖기가 어렵죠. 이래저래 약간 맘에 안 드는 면도 있지만, 코어가 안정적이라는 점에서 약간의 추가 개발을 감안한다면 쓸만한 라이브러리입니다. 그렇지만 어느정도 추가개발을 하게되면 후속 기능의 추가 방향이 P2P가 아니라는 점에서 답답함을 느끼게 됩니다. 버그 수정에 대한 피드백을 빨리 반영하는 편이므로 안정성면에서는 괜찮지만, 개발방향이 MMOG쪽으로 잡혀있다는건 장래성을 어둡게 하는 요소가 아닐까 싶습니다. 서버 기반 C/S 모델의 MMOG가 TCP를 놔두고 UDP를 써야할 이유가 뭔지 잘 모르겠거든요..

댓글 없음:

댓글 쓰기