SignalR을 이용하여 게시/구독 응용프로그램 구현하기

RTFM/ASP.NET 2012. 5. 24. 02:16

원문 : http://msdn.microsoft.com/ko-kr/magazine/hh965663(en-us).aspx

MS에서 또 개발자들에게 고마운 선물을 하나 주려나 봅니다.

웹(HTTP)은 원래 비연결지향적으로 설계되었습니다.

즉, 클라이언트가 서버에게 요청을 하면 서버가 그에 대한 응답을 주는 방식입니다.

바꿔 말하면 클라이언트가 요청하지 않았는데 서버가 먼저 어떤 정보를 줄 수는 없는 구조입니다.

따라서 채팅과 같은 대부분의 네트웍 프로그램은 순수한 HTTP 프로토콜만으로는 구현하기가 힘이 듭니다. (물론 HTML5의 웹소켓을 제외한 이야기입니다.)

서버가 클라이언트에게 요청을 할 수 없으니, 클라이언트가 주기적으로 계속 서버에게 자신에 줄 정보가 있는지를 물어보는 구조가 될 수 밖에 없는데, 이른바 폴링(polling)입니다.

(제가 아는 한에서는) AJAX를 통하여 비동기로 서버에 폴링을 하는 방법을 사용하는 것이 통상적인 경우일 것 같은데, 이 경우의 문제는 수 많은 클라이언트들로부터 폴링을 받아야 하는 서버의 부담이 너무 크다는 것을 들 수 있겠습니다.

이러한 문제에 대한 한 가지 해법으로, MS의 두 개발자가 닷넷 프레임웍4의 병렬 프로그래밍 기술을 기반으로 하여 게시/구독 패턴을 구현한 라이브러리를 발표하였는데 그 이름이 SignalR 이라고 합니다.

(아직 0.5 버전이니 발표하는 중이라고 해야겠네요.)

서버는 물론 ASP.NET으로 구현이 되어야 하지만, 클라이언트는 jQuery를 지원하기만 하면 된다니까 크롬이나 사파리, 심지어 모바일 브라우저에서도 쓸 수 있다고 합니다.

게다가 향후에는 웹이 아닌 데스크탑 애플리케이션도 클라이언트가 될 수 있다고도 합니다.

 

저는 오랫동안 게시/구독 패턴에 입각한 (윈폼용) 라이브러리를 꼭 가지고 싶었습니다.

그런 라이브러리가 있다면 상당히 많은 일을 할 수 있을 것 같아, 직접 만들어보기도 하고 또 다른 사람들이 만든 수 많은 라이브러리들을 검토해보기도 하였는데, 안심하고 신뢰할 만한 것은 아직 발견하지 못하였습니다.

어쩌면 이 SignalR 이라는 라이브러리가 제가 오랫동안 찾던 바로 그 라이브러리가 될 수도 있겠지요.

 

추신 : 말 그대로 여담인데, 게시/구독 패턴을 구현할 때 굳이 TCP를 고집할 이유는 없을 것 같습니다.

UDP를 사용하는 것도 괜찮은 방법이고, WCF의 DuplexBinding을 사용하는 것도 좋은 방법인 것 같습니다.

다만 WCF는 소켓을 직접 다루는 것에 비하면 확실히 무거우니, 현재로서는 UDP에 한 손을 들어주고 있습니다.

: