RESTful Services
Representational state transfer (REST)는 World Wide Web처럼 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처 스타일이다.
요즈음 웹 서비스를 논할 때마다, 화제가 되는 REST는 Roy T Fielding이 2000년에 제창한,
네트워크 기반 어플리케이션을 위한 아키텍쳐 *스타일*로 표준이나 스펙이 아님에 유의한다.
Representational state transfer은 마치 리소스(Resource)가 요청(Request)에 따라 상태가 변화하는 것처럼 동작한다는 의미에서 작성된 용어이다.
REST(XML over HTTP) 특징
을 살펴보면 다음과 같다.
- HTTP와 XML 이용
HTTP와 XML을 이용하여 데이터를 주고 받는 웹 서비스를 이용한다.
- 소프트웨어 아키텍처 스타일
표준 기술이 아닌, 소프트웨어 아키텍처 스타일이다. 아키텍처 스타일은 아키텍처적인 제한 및 제약 조건을 정의해놓은 집합이다.
HTTP와 같은 기존의 기술을 이용하여 잘 설계된 분산 웹 어플리케이션을 만들수 있도록 하는 설계 가이드에 해당한다.
- WWW(웹), Open API
적용 예로 WWW(웹), Open API(ex. Google, Microsoft, Amazone, eBay, Yahoo 등)가 있다. 더 자세한 내용은 REST 적용 예
를 참고한다.
다음은 SOAP을 이용한 웹 서비스와 REST 방식의 웹 서비스를 비교한 그림이다.
그림에서와 같이 "http://***/movieservice/movies/001" 형태의 URL을 요청한 경우, 그 결과 데이터는 XML 형식으로 반환된다.
Apache CXF을 이용하여 RESTful 서비스를 구현하는 방법
에는 다음과 같이 3가지 방법이 있다.
- JAX-RS (JSR-311)
JAX-RS(JSR-311) Spec.
을 이용하여 RESTful 서비스를 구현하는데, Apache CXF에서 Spec.에 대한 구현체를 제공하여
표준 방식으로 RESTful 서비스를 작성할 수 있게 한다. JAX-RS에서 제공하는 Annotation 설정을 이용한다.
- HTTP Binding
표준 방식이 아닌 방법으로 가장 쉽고 용이한 방식으로 RESTful 서비스를 작성할 수 있게 한다.
JRA(Java REST Annotation) 설정 또는 Naming Convention 기반의 매핑 방식을 이용한다.
- JAX-WS Provider/Dispatch API
간단한 RESTful 서비스 작성을 지원한다. 표준 API를 사용하나 HTTP Binding 방식에 비해 유연한 구조가 아니다.
다음은 각각의 RESTful 서비스 구현 방법 별로 어떻게 사용하는지에 대한 사용법이다.
REST 적용 예
WWW(웹)
REST 적용 예시로 가장 많이 사용되는 것이 바로 WWW(웹)이다.
| 설명
|
| 상태를 유지하지 않는 클라이언트/서버 구조를 가진다. |
| 어디에서나 적용되는 인터페이스를 가진다. (e.g., GET, POST, PUT, DELETE) |
| 모든 자원은 URI를 이용하여 유일하게 지칭될 수 있다. |
| 자원들의 표현(Representation)들이 URI을 통해 서로 연결되어 있다. |
Open API
최근 들어 Open API 활용이 증가하고 있다.
| 설명
|
| 특정 기능 또는 컨텐츠를 가진 서비스 업체가 자신들의 서비스에 접근할 수 있도록
외부에 접근방법을 공개하는 것을 Open API라고 한다. |
| Open API를 이용하여 새로운 서비스를 개발할 수 있다.
즉 Open API는 해당 서비스로 접근하기 위한 규약 또는 표준적인 인터페이스를 의미한다. |
| Google, Microsoft, Amazon, eBay, Yahoo에서는 이미 여러 Open API를 공개하고 있다. |
Resources
다운로드
샘플 테스트 코드를 포함하고 있는 anyframe-remotingtest-src.zip 파일을 다운받은 후, 테스트 환경 설정
을 참조하여
위에서 제시한 예제 코드를 실행해 볼 수 있다. 이때 해당 프로젝트 내의 src/test/java 소스폴더 하위의 anyframe.core.remoting.webservices.restful 패키지 하위의 테스트케이스 클래스를
JUnit Test Framework을 이용하여 수행시키도록 한다.
| Name
|
Download
|
| anyframe-remotingtest-src.zip |
Download
|
참고자료