'2010/06'에 해당되는 글 4건
- 2010/06/17 하이버네이트 완벽 가이드 출판. (8)
- 2010/06/15 5차 "중소기업 재직자를 위한 폴리텍대학 스프링 강좌" 강의 개설합니다.
- 2010/06/04 [Spring 3.0 Inside] 3. RESTful MVC
- 2010/06/01 서진이 50일 촬영
오랫동안 노력을 들인 끝에 드디어 '하이버네이트 완벽 가이드'(원서명: Java Persistence with HIbernate)가 출판됐습니다!
용어 선정부터 한글 표현 다듬기까지 어느 하나 쉬운 일이 없었지만 잘 마무리해서 나오게 된 걸 보니 작은 성취감을 느끼게 됩니다.
이 일을 잘 마무리 했으니 이제 새로운 일을 시작하는 데도 마음이 한 결 가벼워졌습니다.
책 내용도 만만치 않고, 가격도 쉽 사리 집어 들기 어렵기는 하지만 ORM을 사용하면서 어려움을 겪거나, 사용을 고민하고 있는 분들에게 도움이 되는 그런 책이 되었으면 좋겠습니다.
# Rest URL 매핑 지원
@RequestMapping과 @PathVariable 등을 통해 Restful 스타일의 URL 매핑 기능을 지원합니다.
JAX-RS 구현체와 기존 Spring MVC를 연계하여 Restful한 서비스를 구성할 수 있지만, 3.0에서는 @MVC를 사용하여 직접 restful한 서비스를 구현할 수 있는 기능을 제공합니다. 이 둘간의 비교는 이 링크 http://www.infoq.com/articles/springmvc_jsx-rs를 참조하시면 됩니다.
# Contents negotiation
HTTP Accept 헤더로 서버 응답(view)을 내리는 방법을 결정합니다. 실제로는 ContentNegotiatingViewResolver을 통해서 구현되어 있습니다.
HTTP Accept 헤더를 기준으로 판단하여 다른 viewresolver를 결정하며, context 내의 view resolver를 자동으로 찾도록 할 수도 있고, 명시적으로 설정도 가능합니다.
주의할 점은 view resolver order 상 가장 위로 해주어야 합니다. view resolver는 view를 결정하는 방법이지 view 자체가 아니므로 controller에서 이 resovler를 쓴다고 해서 따로 해야할 일은 없습니다.
Contents negotiation 뿐만 아니라 웹 파라미터를 통해 뷰를 결정하거나, url의 확장자를 통해 뷰를 결정하는 기능을 뷰 리졸버 확장을 통해서 구현할 수도 있습니다. 다양한 RESTful URL 매핑 방식을 구성할 수 있습니다.
또한 그리고 Restful한 서비스를 구현할 때 뿐만 아니라 다양한 클라이언트 솔루션과의 연계에서도 ViewResolver를 통한 뷰를 런타임시에 결정하는 방식을 응용할 수가 있습니다.
# ETag
해당 URL의 컨텐츠가 변경 되었는지 결정하는데 사용하는 HTTP/1.1 호환 웹 서버 반환 HTTP 응답 헤더를 말하며, 헤더의 If-None-Match 비교합니다. 크게 두 가지 방식으로 구현이 가능한데 shallow tag과 deep tag 방식이 있습니다.
스프링에서 shallow tag 방식을 제공하며, 구현하는 방식은 응답을 내려보낼 때 md5 해시 값을 저장해두었다가 다음 번에 동일한 리소스에 대한 요청이 올 때도 역시 md5를 구해봐서 이 값이 같으면 "304:Not Modified"를 반환하게 됩니다. (ShallowEtagHeaderFilter를 통해 구현) 이렇게 처리함으로써 동일한 자원을 렌더링하는 시간을 줄일 수가 있겠죠. 렌더링 시간을 동일하나 클라이언트로 반환하는 컨텐츠를 없애서(contentlength=0) bandwidth를 줄여주게 됩니다.
deep etag는 이런 비교의 기준을 도메인 객나 rdb 테이블 등에 저장해 처리하며. 이는 차후 스프링 버전에서 지원할 예정이라고 합니다.(JPA의 @Version 처럼...)
그러나 위키피디아를 찾아보니 shallow, deep tag라는 용어를 사용하지는 않네요. 그 대신 collision-resistant hash function을 주로 활용한다고 하고, 오히려 optimistic concurrency control을 구현하는데 ETag를 활용할 수 있다는 게 더 관심이 가는 내용입니다.
# HTTP 메서드 풀 지원 HTTP Method Conversion
html에서는 get/post만 지원하는데 스프링에서는 전체 HTTP 메서드를 지원하는 필터(HiddenHttpMethodFilter)를 제공합니다. HiddenHttpMethodFilter를 등록함으로써 HTML에서도 전체 HTTP 메서드를 사용해 RESTful 서비스를 구성할 수가 있습니다.
# 다양한 view 지원
3.0에서는 크게 JSON, XML, RSS에 대한 별도의 뷰가 추가되었습니다.
- MarshallingView: 다양한 파싱구현체 지원은 좋으나 지금까지는 단 하나의 모델엘 대한 매핑 기능만 제공하는 단점이 있습니다.
- JacksonJsonView: Jackson API를 사용하여 DTO와 JSON 객체와의 매핑 기능 제공
- AbstractAtomFeedView, AbstractRssFeedView: FEED를 뷰로 구성할 수 있는 추상 클래스를 제공. 클래스를 상속해 필요한 메서드를 재정의하면 됨.
그 외 클라이언트 수준의 REST API를 지원하는 RestTemplate을 제공합니다만 생략하도록 하겠습니다^^.

Prev

Rss Feed