REST Web Service에서 Projection을 이용한 웹 인터페이스 유연성 확보하기.
Projection 기능이란?
프로젝터와 같이 실제하는 물체를 보고 싶은 형태로 볼 수 있게 도와주는 기능을 말한다. 좀 더 쉽게 말하면 실제하는 물체란 필름을 말하는 것이고, 보고 싶은 형태란 70인치 화면으로 보여주는 것을 말한다. 설정에 따라 30인치 화면으로 볼 수도 있다.즉, Projection 기능이 있다면 상황에 맞는 화면 크기로 보여 줄 수 있는 것이다.
[프로젝터]
웹 인터페이스 설계의 어려움
웹서버를 개발하는 개발자 입장에서 하나의 인터페이스라도 만드는 일은 쉽지 않다. 그렇기 때문에 웹 인터페이스의 개수를 줄이려고 노력하는 것이 일반적이다. 그러기 위해서는 좀 더 일반적인(General) 형태의 인터페이스로 설계하는 수밖에 없다. 그러나 아이러니하게도 사용자(인터페이스를 사용하는 다른 개발자) 입장에서는 이런 일반적인 인터페이스를 쓰기란 여간 어려운게 아니다.클라이언트마다 필요한 데이터가 다르다.
REST 웹서비스에서는 리소스에 해당하는 데이터를 다음과 같이 JSON 형식의 Response로 전달해준다. 예를 들어 다음과 같이 상품 정보를 보내주는 RESR API가 있다고 해보자.GET /api/furniture/item/123334333
위의 REST API를 이용하여 다음과 같은 데이터를 받을 수 있다.
{ "item_id" : 1233343333, "name" : "chair", "category" : "furniture", "price" : 56000, "seller" : "Makers", "description" : "Good Chair" }
그러나 문제가 있다. 모든 클라이언트가 위의 모든 데이터를 필요로 할거라고 생각했지만, 실제로는 어떤 클라이언트는 "item_id"와 "name", "price"만 필요로 할 뿐이라고 한다. 나머지는 불필요한 데이터이다. 궂이 웹서비스로 가져올 필요도 없는 부분이다. 이런 클라이언트가 많은 경우 새로운 인터페이스를 만들어줘야 할까?
Projection 기능을 활용하자.
웹서비스에서 쓰이는 프로젝션 기능을 활용해보자. Projection 기능이란, 앞서 말한 프로젝터의 기능과 같다. 실제하는 데이터가 있고, 그 데이터를 사용자가 보고 싶은 크기로 줄였다가 늘렸다가 하는 것을 도와주는 것이다. 데이터의 필드(JSON Tag)를 선택적으로 보여줄 수 있게 해준다.클라이언트에서 원하는 데이터가 다음과 같이 3가지라고 해보자.
- 아이템 ID
- 이름
- 가격
웹서비스 결과로 다음과 같은 결과가 오는 것이 최선일 것이다.
{ "item_id" : 1233343333, "name" : "chair", "price" : 56000 }
다음 장에서 Spring Data의 Projection 기능을 이용하여 이를 쉽게 해결하는 방법은 볼 것이다.
Goto "Spring Data Projection"
댓글
댓글 쓰기