올해에도 Taeyo.net 신년 세미나에서 발표를 하게 되었습니다. 블로그에 포스팅 한 그리고 포스팅 할 REST관련된 포스트를 기반으로 세미나를 진행 하려고 합니다. 열심히 준비 하고 있으니 많이 참석 하셔서 좋은 정보 얻어 가셨으면 좋겠습니다. 아래는 자세한 세미나 정보 입니다.^^
날짜 : 2010년 1월 30일 토요일 오후 2시
장소 : 선릉역 근처 포스코빌딩 서관 5층 마이크로소프트 세미나 룸
지도 :
세션 시간 : 오후 2시부터 6시까지
세션 개요 :
2:00 - 2: 50 ASP.NET 4.0 New Features ? Part 1
3:00 - 3: 50 ASP.NET 4.0 New Features - Part2 : URLRouting
4:00 - 4: 50 ASP.NET Web Service와 jQuery Ajax 유형별 소개 및 Pager 플러그인으로 방명록 만들기
5:00 - 5: 50 WCF를 사용한 REST 서비스 구현
구체적인 내용은 다음과 같습니다.
세션 1
시간 : 14:00 - 14:50 (50분)
발표자 : 최지훈 MVP (드원테크놀로지 컨설턴트)
제목 : ASP.NET 4.0 New Features ? Part 1
설명 :
.NET Framework 4.0 Beta의 공개와 함께 ASP.NET 4.0에서도 많은 흥미로운 변화가 생겼습니다.
ASP.NET 4.0에서 새롭게 등장한 기능 및 이전의 ASP.NET과 비교하여 달라진 기능들을 이해함으로써,
보다 효과적으로 ASP.NET 4.0을 사용하는 방법을 알아보는 시간을 갖습니다.
세션 2
시간 : 15:00 - 15:50 (50분)
발표자 : 한상훈 MVP (한빛소프트)
제목 : ASP.NET 4.0 New Features - Part2 : URLRouting
설명 :
알기 쉬운 URL에 대한 정의와 어떠한 장점을 가지고 있는지에 대해 알아보고,
ASP.NET WebForms 환경에서의 URL Routing에 대한 전반적인 소개 및 구현을 해보도록 한다.
세션 3
시간 : 16:00 - 16:50 (50분)
발표자 : 박용준 MVP (프리랜서, 전문강사 )
제목 : ASP.NET Web Service와 jQuery Ajax 유형별 소개 및 Taeyo jQuery Pager 플러그인으로 방명록 만들기
설명 :
jQuery Ajax 기능을 사용하여 ASP.NET Web Service에서 반환되는 여러가지 데이터 형식을 처리하는 유형을
정리하여 설명한 후 이를 적용한 간단한 웹 응용 프로그램을 만들어 본다.
세부 내용 :
- ASP.NET + jQuery Ajax + JSON : 단일값 반환
- ASP.NET + jQuery Ajax + JSON : Object(개체값) 반환
- ASP.NET + jQuery Ajax + JSON : DateTime(날짜값) 반환
- ASP.NET + jQuery Ajax + JSON : List값 반환
- 페이징 처리시 Taeyo jQuery Pager 플러그인 적용
세션 4
시간 : 15:00 - 15:50 (50분)
발표자 : 김경균 MVP (드원테크놀로지 컨설턴트)
제목: WCF를 사용한 REST 서비스 구현
설명 :
SOAP기반의 웹 서비스에 비해 가볍고 구현이 쉬운 REST에 대해 알아보고 WCF를 통해 REST 서비스를 구현해
보도록 한다. 그리고 .NET Framework 4에서 추가된 WCF의 새로운 기능 중 REST와 관련된 부분에 대하여
알아보도록 한다.
참석하실 분들은 다음 링크로 이동 하셔서 자신의 이름(혹은 아이디)를 기입해주시기 바랍니다.
REST 서비스를 사용하면서 가장 큰 장점이라고 할 수 있는 것이 바로 HTTP 캐싱을 사용할 수 있다는 것이다. .NET Framework 4에서는 AspNetCacheProfile 어트리뷰트를 사용하여 아주 간단하게 REST 서비스를 캐시할 수 있습니다. AspNetCacheProfile 어트리뷰트는 ASP.NET output 캐시와 함께 동작하게 됩니다.
이오류는서비스가 ASP.NET 호환성을지원하지않기때문에활성화될수없으니호환성을켜라~ 뭐이런이야기를하고있는데말그대로 WCF 서비스가 ASP.NET 호환코드로실행되지않기때문에발생하는오류입니다. 다음코드와같이서비스클래스에어트리뷰트를추가하고 RequirementsMode 를 AspNetCompatibilityRequirementsMode.Allowed로설정하면 ASP.NET호환코드로동작하게됩니다. 기본값은 NotAllowed입니다.
.NET Framework 4에서는 WCF를 통해 RESTful 서비스를 개발 할 때 도움을 줄 수 있는 몇 가지 기능이 추가 되었습니다. 첫 번째로 개발한 RESTful 서비스에 대해 서비스를 사용하는 사람이 제공되는 서비스를 보다 쉽게 이해할 수 있도록 하기 위해 도움말 페이지를 자동으로 만들어 줍니다. 두 번째는 동일한 요청에 대해 보다 좋은 성능을 낼 수 있도록 선언적으로 구성할 수 있는 HTTP 캐싱을 지원합니다. 마지막으로 몇 가지 중요한 기능이 추가 되었습니다. 조건에 다라 GET/PUT 요청을 수행할 수 있는 기능이 추가 되었고 WebFaultException을 제공하여 예전에는 지원되지 않았던 REST 클라언트에게 오류 메시지를 반환 할 수 있게 되었습니다. 마지막으로 REST 서비스에 다양한 메시지 포맷으로 컨텐츠를 반환 할 수 있게 되었습니다. 예전에는 JSON과 XML만을 제공 하였으나 ATOM, Text, Binary등을 지원하게 되었습니다.
지금부터 하나씩 살펴 보도록 하겠습니다.
도움말 페이지 사용하기
WCF 웹프로그래밍 모델로 구현된 RESTful 서비스는 HTTP GET이나 HTTP POST와 같은 HTTP 기본동사를 사용하기 때문에 별도의 WSDL을 제공하지 않습니다. 그렇기 때문에 일반적인 ASP.NET 웹 서비스나 WCF 서비스에서처럼 "웹 참조" 혹은 "서비스 참조"를 사용할 수 없습니다. 만약 서비스에 대한 정확한 스팩을 별도로 제공하지 않는다면 RESTful 서비스를 사용하는 사용자 입장에서는 어떠한 정보도 알 방법이 없다는 단점이 있습니다. 이러한 점을 해결하기 위해 .NET Framework4 에서는 간단한 설정을 통해 도움말 페이지를 제공할 수 있는 기능이 추가 되었습니다.
이미 개발 해 놓은 웹프로그래밍 모델로 구현된 서비스에 도움말 페이지를 사용할 수 있도록 하기 위해서는 끝점의 동작에 대한 정보를 설정하는 endPointBehavior를 추가합니다. 그런 다음 새로운 behavior를 추가하고 자식 엘리먼트로 webHttp 엘리먼트를 추가한 후 helpEnabled 어트리뷰트를 true로 설정하면 도움말 페이지를 볼 수 있습니다.
설정을 완료 한 후 해당 svc파일을 미리 보기 하면 [그림1]과 같은 초기 화면을 볼 수 있습니다. Help설정을 하기 전에는 이 화면에 끝점을 찾을 수 없다는 메시지만 출력 되었으나 Help설정 후에는 친절하게도 유효한 요청을 생성할 수 있는 서비스 도움말 페이지를 제공한다고 표시됩니다.
페이지의 service help page 라는 링크를 클릭하거나 Url의 가장 뒤에 /help를 입력함으로써 도움말 페이지로 이동 할 수 있습니다.
그림 1. 서비스시작페이지
도움말 페이지는 svc 파일 즉, 현재 서비스에서 노출 하고 있는 서비스의 목록을 보여줍니다. 목록은 UriTemplate를 통해 이름 지어진 Uri, 표준 HTTP 동사, 그리고 간단한 설명이 표시됩니다. 각 HTTP 동사에 링크가 걸려있고 이를 클릭하면 보다 자세한 정보를 제공합니다.
그림 2. 도움말목록페이지
SetPost에 대한 자세한 도움말을 요청 형식(XML 또는 Json)에 따라 Body를 구성할 수 있는 예제가 주어 집니다. 또한 XML은 관련 스키마를 제공해 주기도 합니다.
예를 들어 HTTP Method가 POST이고 Body를 [그림 3] 의 XML또는 Json Body 처럼 구성하면 새로운 포스트를 작성 할 수 있게 되는 것입니다. 그리고 이 메서드는 아무것도 반환하지 않으므로 응답은 Response Body가 비어 있다는 설명과 함께 N/A로 나타나게 됩니다.
그림 3. 상세도움말페이지
각 도움말 페이지는 서비스당 즉 .svc당 하나씩 만들어지게 되며 OperationContract특성이 붙어있는 모든 서비스 메서드가 노출 됩니다.
다음 포스트는 HTTP Caching 지원에 대해 살펴 볼까 합니다. 다음 포스트에서 뵐께요~^^