'RTFM'에 해당되는 글 46건

  1. 2012.05.24 SignalR을 이용하여 게시/구독 응용프로그램 구현하기
  2. 2011.11.02 뷰스테이트 : 퍼포먼스 오버헤드를 줄이는 다양한 방법
  3. 2011.11.02 ASP.NET 세션 탐험
  4. 2011.11.01 ASP.NET 캐시 탐험
  5. 2011.11.01 ASP.NET 애플리케이션과 페이지 수명 주기
  6. 2011.11.01 웹 애플리케이션 노트 (ASP.NET, AJAX 포함)
  7. 2011.11.01 초보자를 위한 자바스크립트
  8. 2010.09.17 윈도우즈 서비스 라이브러리
  9. 2010.06.20 T4를 이용한 WCF 클라이언트 래퍼 생성
  10. 2010.06.20 미리 보는 MSDN 라이브러리의 변화

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에 한 손을 들어주고 있습니다.

:

뷰스테이트 : 퍼포먼스 오버헤드를 줄이는 다양한 방법

RTFM/ASP.NET 2011. 11. 2. 11:16
http://www.codeproject.com/KB/viewstate/ViewStateTricks.aspx

뷰스테이트의 크기를 줄이는 두 가지 방법에 대해서 설명을 합니다.

1) 뷰스테이트를 압축하여 전송하는 방법
2) 뷰스테이트를 서버에 저장하고 클라이언트로는 전송하지 않는 방법

두 방법 모두 Page.LoadPageStateFromPersistenceMedium 메서드와 Page.SavePageStateFromPersistenceMedium 메서드를 각각 오버라이드 하여 구현합니다.

추신 : 두번째 방법의 경우라면, 뷰스테이트는 더 이상 클라이언트 사이드 상태저장 메커니즘이라고 할 수 없겠네요.
:

ASP.NET 세션 탐험

RTFM/ASP.NET 2011. 11. 2. 11:07
http://www.codeproject.com/KB/session/ExploringSession.aspx

역시 세션에 관한 탁월한 정리.
보너스인 웹 가든, 웹 팜, 로드 밸런서와 세션과의 관계에 대한 설명도 유용합니다.
:

ASP.NET 캐시 탐험

RTFM/ASP.NET 2011. 11. 1. 17:00
http://www.codeproject.com/KB/aspnet/ExploringCaching.aspx

ASP.NET 의 캐시에 관한 탁월한 정리
:

ASP.NET 애플리케이션과 페이지 수명 주기

RTFM/ASP.NET 2011. 11. 1. 14:36
http://www.codeproject.com/KB/aspnet/ASPDOTNETPageLifecycle.aspx


ASP.NET 의 페이지 수명 주기에 대해 상세하지만 동시에 (도해를 이용하여) 간결하게 설명을 해 놓았습니다.

ASP.NET 의 요청 처리를 설명하면서 MHPM (Module, Handle, Page and Module event) 라는 신조어를 만든 게 흥미롭습니다.
:

웹 애플리케이션 노트 (ASP.NET, AJAX 포함)

RTFM/웹 일반 2011. 11. 1. 14:27

http://www.codeproject.com/KB/aspnet/NoteOnWebApplications.aspx

1) (데스크탑 애플리케이션에 대비되는 개념으로서) 웹 애플리케이션의 개념, 2) 클라이언트/서버 사이트 프로그래밍 모델, 3) REST 의 개념와 의의, 4) HTTP 프로토콜에 대한 소개 등이 종합적으로 정리되어 있는, 말 그대로 웹 프로그래밍에 입문하는 개발자들이 꼭 알아야 하는 기본 지식이 망라되어 있습니다.

기본에 대한 중요성은 역시 아무리 강조해도 지나치지 않은 법이 아닐까 합니다.

추신 : 웹 개발자를 위한 웹을 지탱하는 기술 과 함게 읽으면 시너지가 있을 듯 합니다.

:

초보자를 위한 자바스크립트

RTFM/웹 일반 2011. 11. 1. 14:03

http://www.codeproject.com/KB/scripting/jsbeginner.aspx

코드 프로젝트의 웹 개발 첫걸음 시리즈 중 하나인 자바스크립트 편입니다.
아주 practical 한 관점에서 정리가 잘 되어 있는 듯 합니다.
(자바 스크립트 언어 자체에 대한 설명은 아닙니다.)
:

윈도우즈 서비스 라이브러리

RTFM/기타 2010. 9. 17. 01:00

Ron Wilson 의 윈도우즈 서비스 라이브러리

경우에 따라서는 응용 프로그램이 일반적인 형태의 데스크탑 응용 프로그램이 아닌 윈도우즈 서비스 형태로 구현되어야 하는 경우가 있습니다.

물론 비주얼 스튜디오를 이용하면 상당히 편리하게 서비스를 개발할 수 있긴 하지만, 그래도 디버깅과 서비스 설치 등에 있어 일반적인 응용 프로그램 보다는 번거로운 것이 사실입니다.

최근에 어줍잖은 윈도우즈 서비스를 하나 만드는 과정에서 Ron Wilson 이라는 분의 윈도우즈 서비스 라이브러리를 알게 됐는데, 그 유용함에 매료되어 이를 널리 알리고자 합니다.

Ron Wilson 이 코드 프로젝트에 쓴 원문은 아래와 같습니다.

http://www.codeproject.com/KB/system/SimpleServiceDotNet.aspx

간단히 요약하자면 이 라이브러리를 이용하면,

1. Windows Service 가 아닌 Console 프로젝트를 사용하기 때문에, 일반적인 콘솔 프로그램의 편리함을 그대로 유지할 수 있습니다.

2. 빌드한 결과물인 exe 파일을 바로 서비스로 등록할 수 있어, 번거로운 서비스 설치 작업(InstallUtil.exe)이 필요하지 않습니다.

라고 할 수 있겠습니다.


서비스 작성 연습

이 글에서는 이 라이브러리를 사용하여 간단한 윈도우즈 서비스를 구축하는 과정을 보여드릴까 합니다.

하루에 한 번 하드디스크의 용량을 체크하여 관리자에게 메일을 보내는 서비스를 개발하도록 하겠습니다.


프로젝트의 생성과 구성

먼저 콘솔 프로젝트를 하나 만듭니다.

이름은 WindowsServiceDemo 라고 하지요.

Ron 의 기사에서 라이브러리를 다운 받고, 그 중 아래 세 파일을 WindowsServiceDemo 프로젝트에 추가합니다.

ISimpleServiceWorker.cs
SimpleService.cs
SimpleServiceInstaller.cs

WindowsServiceDemo  프로젝트에 아래 어셈블리에 대한 참조를 추가합니다.

System.configuration.dll
System.Configuration.Install.dll
System.Management.dll
System.ServiceProcess.dll

프로젝트의 등록 정보의 설정 탭에서 새로운 설정 파일을 추가합니다.

설정 파일을 열어 아래 값을 입력해 둡니다.

MailReceivers 는 메일을 받을 수신자 목록입니다. ; 으로 각 메일 주소를 구분합니다.

HoursToWork 는 하루 중 서비스가 동작할 시각의 목록입니다. 각 시각은 역시 ; 으로 구분합니다.

예를 들어 2;14 라는 것은 이 서비스가 2시와 14시에 한 번씩 실행된다는 의미입니다.


Utility 클래스

Utililty 클래스를 하나 추가한 후 몇 가지 헬퍼 메서드를 추가합니다.

이 글에서는 윈도우즈 서비스에 집중하기 위해 이 헬퍼 메서드에 대한 설명을 생략하지만, 좀 더 자세한 것은 주석과 첨부파일에 있는 소스를 참고하십시오.

먼저 시스템에 부착되어 있는 모든 논리 디스크의 이름과 남은 용량을 반환하는 메서드입니다.

그리고 지메일을 통해 이메일을 발송하는 메서드를 추가합니다.

마지막으로 string.Split 메서드의 래퍼 메서드를 하나 추가합니다.


Worker 클래스

이제 본격적인 서비스 작업을 구현할 차례인데요.

먼저 이 작업을 할 Worker 클래스를 추가합니다.

Worker 클래스는 Ron 의 라이브러리에 있는 ISimpleServiceWorker 인터페이스에 있는 세 가지 메서드를 구현하여야 하는데,

이 중 Init 와 Cleanrup 메서드는 각각 리소스의 할당과 해제를 담당합니다.

우리의 서비스에선 별도의 리소스를 사용하지 않으므로 그냥 비워둡니다.

실질적인 서비스의 코드는 Run 메서드 안의 무한 루프에 있습니다.

먼저 현재 시각을 체크하여 서비스가 동작할 시각인지를 체크합니다.

서비스가 동작할 시간이 맞다면, 하드디스크의 남은 용량을 검사한 후 이메일을 발송합니다.

이 루프를 매 1시간 마다 반복합니다.


타이머

서비스 프로그램, 특히 우리의 예제와 같은 로그성의 서비스를 만들 때 가장 어려운 문제 중 하나는 아마도 타이머를 만드는 일일 것입니다.

이 예제에서는 간단하게 현재의 시각(hour)이 예약된 시각(hour)과 같은지를 검사하는 로직을 사용하겠습니다.

IsTimeToWork() 메서드는 서비스가 일할 시간인지를 알려주는 역할을 합니다.

예를 들어, 설정 파일에서 Settings.Default.HoursToWork 에 2:14 라고 입력을 하였다면,

현재 시간이 2시 몇 분 이거나 14시 몇 분 이면 이 메서드는 true 를 반환합니다.


하드디스크의 남은 용량 조사

CheckFreeSpace 메서드는 하드디스크의 남은 용량을 조사하여 StringBuilder 에 기록해 두는 일을 합니다.


메일 발송

설정 파일에 저장된 수신 목록의 각 이메일 주소에 대해 메일을 발송합니다.

모든 메일이 성공적으로 발송되면 true 를  반환합니다.

1. 물론 “지메일 아이디”와 “지메일 비밀번호”에는 맞는 값을 입력하여 합니다.
2. 지메일에서 하루에 보낼 수 있는 메일의 양에는 제한이 있습니다. 대충 100통 정도인 걸로 기억이 되는데, 확실하지는 않습니다.

디버깅

이제 서비스가 제대로 동작하는 지 테스트를 해 봅시다.

Program.cs 의 아래와 같이 변경합니다.

Ron 의 라이브러리를 사용하기 때문에 이 서비스를 실행하기 위해서는 실행파일의 끝에 –console 이라는 매개변수를 붙이면 됩니다.

Debug 모드에서는 매번 매개변수를 붙이기 힘드니까 비주얼 스튜디오에서 이 매개변수를 지정하겠습니다.

프로젝트의 등록 정보에서 아래와 같이 설정합니다.

F5 를 눌러 디버깅을 시작하면 서비스가 동작하는 것을 확인할 수 있습니다.

설정 파일의 HoursToWork 값을 현재 시간으로 맞춰놓고 테스트를 해보시기 바랍니다.


배포와 설치

마지막 단계는 개발한 서비스를 배포하고 설치하는 것입니다.

배포를 하기 위해서는 일단 Relese 모드로 빌드를 하고, bin\Release 폴더에 생성된 파일을 모두 배포할 컴퓨터에 복사를 합니다.

먼저 배포할 컴퓨터에서 명령창을 열어 아래와 같이 입력하여 도움말을 확인해보겠습니다.

현재는 서비스를 설치를 해야 하기 때문에 –install 옵션을 사용해야겠습니다.

그럼 아래와 같이 입력을 해야겠네요.

설치가 되었습니다.

설치된 서비스를 시작할 때는 –start 옵션을 사용합니다.

물론 서비스를 삭제할 때는 –uninstall 을 지정하면 됩니다.


정리

Ron Wilson 의 윈도우즈 서비스 라이브러리를 사용하면 윈도우즈 서비스를 아주 편리하게 개발/디버깅/설치할 수 있습니다.

감히 윈도우즈 서비스 개발의 (one of the) best practice 라고도 할 수 있을 것 같습니다.

:

T4를 이용한 WCF 클라이언트 래퍼 생성

RTFM/WCF 2010. 6. 20. 15:21

http://www.codeproject.com/KB/codegen/WCFWrapperUsingT4.aspx

 

비주얼 스튜디오에 내장된 코드 생성기인 T4를 사용하여 WCF 클라이언트 래퍼 코드를 생성하는 방법에 대해 설명합니다.

:

미리 보는 MSDN 라이브러리의 변화

RTFM/기타 2010. 6. 20. 15:18

http://weblogs.asp.net/scottgu/archive/2010/06/15/preview-of-msdn-library-changes.aspx

 

본 포스트에서는 현재 두 가지의 변경사항에 대해 언급하고 있습니다.

1. 간소화된 네임스페이스 탐색

2. 클래스의 오버뷰 페이지의 멤버 페이지를 하나로 통합

: