티스토리 툴바


IIS에선 기본적으로 http Binding만 제공한다.
결론만 말하자면 웹어플리케이션에서 self-hosting을 코드(global.asax같은곳에서 ServiceHost를 직접 실행해야함)에서 띄우지 않고서는 netTcpBinding나 netNamedPipeBinding 같은건 IIS에서 지원하지 않는다.
다른 꼼수가 있을지도 모르지만 일단 여기까지...


암시적 계약(DataContract, DataMember등의 선언 없이 객체 사용하기)은 .NET 3.5 SP1에서부터 지원한다.
이건 길버라이트님 블로그에서 발견한 글... 몰랐으면 삽질 할 뻔했다..


전송데이터는 get, set이 되는 public멤버만 전송된다.

internal, private, protected, readonly, get만 구현된 property 다 안된다. 오직 public변수나 get set이 둘 다 구현된 public property만 된다. 이건 Binary를 전송하는 netTcpBinding이나 netNamePipeBinding일 때만 적용되는것일수도 있는데.. 아마도 deserializing후에 객체를 생성하려면 public만 가능하니까 그런것 같다.


특정 데이터를 전송할때 별다른 에러 없이 Service Fault 예외가 발생했다면 직렬화 혹은 역직렬화 문제일 가능성이 크다.
이건 진짜 경험 없으면 알기 힘들다.. 다른 데이터 전송에선 송수신 잘 되는데.. 특정 데이터 송수신에서 그냥 Service Fault에러가 발생한다.. web.config의 includeExceptionDetailInFaults="true"로 해도 똑같은 예외만 보여준다. 이건 MSDN포럼에 가보면 대부분 serializing이나 deserializing을 확인해보라고 조언한다. 그 이유는 보통 상속클래스들을 knownType에 등록을 안해줬기 때문이다. 예를들면 WCF함수에서 object를 반환해주는 함수를 만들었다면... 선언은 object로 했지만 실제로 오고가는 데이터는 뭐가될지 아무도 모른다.. 고로 web.config의 system.runtime.serialization의 knownType에다가 실제로 오고가는 데이터 타입을 선언해주면 된다.
(닷넷의 기본 객체들은 선언없이 모두 직렬/역직렬화 되므로 사용자정의 클래스만 선언해주면 된다.)


자세한 설명과 샘플은 다음에 시간날 때 정리....


저작자 표시 동일 조건 변경 허락
Posted by 귀뫄뉘
TAG WCF
Long-Polling 방식과 Polling방식 선택하기
약간 번외로 웹채팅을 구현할 때 long-polling방식과 polling 방식 중 어느것이 효율적인가 장단점을 따져보도록 하겠습니다.

  • Long-Polling 방식을  선택해야 하는 경우
    • 약 3초 미만의 오차로 실시간 응답이 필요한 경우
    • 메신저 같이 1:1이나 약 10명 이하의 상대와 채팅하는 경우
    • 채팅 서버만 분리 할 수 있는 경우
    • ex) Facebook의 웹채팅, Google의 메신저, MSN의 웹메신저 등
       
  • Polling 방식을 선택해야 하는 경우
    • 응답이 실시간이 아니어도 괜찮거나 3초 이상의 시간차가 발생해도 무난한 경우
    • 약 10명 이상의 상대와 채팅해야 하는 경우
    • 다른 서버 어플리케이션과 함께 동작해야 하는 경우
    • ex) 전체 채팅이 필요한 웹게임이나 랜덤채팅 등


아시다시피 Long-Polling방식은 소켓처럼 거의 실시간으로 응답을 받게 할 수 있습니다.
 하지만 만약 100명이 전체 채팅하는 환경을 Long-Polling방식으로 구현한다면 어떻게 될까요?

Long-Polling 구조상 누군가가 말 한마디 하는 순간 100명의 유저가 동시에 응답을 받고, 다시 응답을 받기 위한 호출(Request)을 100명 모두가 동시에 하게 됩니다. 

순간적으로 Request Queue가 쌓이게 될테니 서버가 버벅대거나 심하면 뻗을 수도 있겠죠. (참고로 IIS의 Max Request Limits는 5000개 라고 하네요.) 

이런걸 self-DDOS라고 해야 하나요? ㅋ


하지만 아까 말했듯이 실시간 응답이 매우 중요한 요소이며, 종종 버벅대거나 뻗어도 상관없을정도로 채팅서버만 물리적으로 분리 해도 되는 환경이라면 Long-Polling도 괜찮은 선택이고,
그 외의 상황이라면 기본적으로 Polling방식의 채팅을 구현하는것이 안정적일 것 같습니다.


Performance Counter로 시스템을 감시해보시면 그 차이가 더욱 명확합니다.

Long-polling 방식은  유저들이 아무말도 안하고 있을땐 리소스를 거의 먹지 않다가, 누군가가 말하기 시작하면 카운터가 불규칙적으로 요동치기 시작합니다. 특히 누가 도배라도 한다면 난리납니다 ㅎㅎ

Polling 방식은 말 하든 안하든 주기적으로 새로고침 할 뿐이니까 일정주기별로 물결 그래프가 그려집니다.
아무래도 Polling방식이 다른 서버 어플리케이션과 함께 동작할 경우 오버헤드를 체크하기 훨씬 쉽겠죠. 하지만 유저가 아무것도 안해도 쓸데없이 리소스를 먹는다는게 아쉽구요.



하지만 Polling 방식으로 구현해도 혹시나 Server Request가 동시에 일어나게 되는 구조로 구현하신다면 Long-Polling의 단점을 그대로 안게 되므로 장점이 없어져 버립니다. 주의해서 개발하시길 바라며,
아무쪼록 웹채팅 구현하시는데 도움이 되셨으면 좋겠습니다. 이만~
저작자 표시 동일 조건 변경 허락
Posted by 귀뫄뉘
어제 간만에 MS 솔루션들을 몇개 써봤는데.. 

ASP.NET MVC3 
asp.net mvc3는 ... aspx와 같이 너무 쓸데없는 기능을 많이 넣었고 지나칠 정도로 jquery에 의존적으로 되버려서 깊이있게 튜닝하려 할수록 오히려 더 손이 많이 가는 계륵 같은 존재가 된것 같다.. 뭐 이건 MS쪽의 모든 개발솔루션의 특징이기도 하니 이제 그러려니 한다.. 개인적으론 MVC1이나 MVC2가 더 나은것 같다.

WebMatrix
그리고 간만에 또 사용해 본 WebMatrix는 매우 쉽고 훌륭했다.. 예전 asp정도의 개발능력만 있으면 될것같고, 트랜잭션이 필요없는 간단한 웹사이트 만들기엔 최고일것 같다. 
WebMatrix Tutorial Download(PDF) 

(2011/12/8 추가)
더 써보니 내가 개발자라서 그런지 아쉬운점이 많이 있긴 했다. 일단 Code Intellisense를 지원하지 않고 Syntax Highlighting만 지원한다. 기본 Database는 SQLCE(파일기반)인데, 다 좋은데 테이블 스키마의 필드네임을 수정할 수가 없다. 닷넷 개발자라면 솔직히 VS Web Express가 더 나을것 같았다. 다만 WebMatrix는 MS측에서 요즘 많이 신경쓰고 있는 php개발자 끌어안기를 위한 툴이라고 생각하면 나쁘지 않은것 같다.

nopCommerce 
그리구 WPI(Windows Platform Installer)를 오랜만에 실행시켜봤더니 웹어플리에이션 샘플이 많아졌다. Commerce항목중에 nopCommerce라는 솔루션 샘플을 봤는데... 헐.. 
그동안 쇼핑몰 제작 의뢰 받았던 대부분의 기능이 이미 구현되어 있고 그것도 매우 심플하게 구성되어 있었다.. 작은 쇼핑몰을 주로 만들어주는 소규모 SI라면 이거 Customizing해서 쓰는게 효율적일것 같다..

쇼핑몰 데모 : http://demo.nopcommerce.com/ 
관리자 데모 : http://admin-demo.nopcommerce.com/Admin 

 

[nopCommerce 관리자 대쉬보드 화면]
 

[nopCommerce 쇼핑몰 메인 화면]

저작자 표시 동일 조건 변경 허락
Posted by 귀뫄뉘