RESTFul 에 대해서 알아보자
2015.05.15 21:00
RESTFul 에 대해서 알아보자
|
RESTful 이란 단어만 봐서는 그 의미를 알 수 없다.
왜냐하면 약어이기 대문이다.
REpresentation State Transfer 의 약자이다.
rest 는 웹의 창시자 중의 한 사람인 roy fielding 의 박사 학위 논문에 의해 소개되었고
그는 현재의 웹 아키텍처가 웹이 지닌 본래의 설계 우수성을 충분히 활용하지 못하고 있다고 판한다고
장점을 최대한 활용할 수 있는 네트워크 기반의 아키텍처를 제안했는데 이것이 바로 rest 이다.
이러한 rest 아키텍처 스타일에 따라 정의 되고 이용되는 서비스를 restful 웹 서비스라고 한다.
기존은 URI + ACTION 관련된 함수 호출 정도였다고 하면
이제는 대상이 나오고 그 대상에 대해서 POST, GET, PUT, DELETE 라는 명령을 통해서
기존 DB에 가해졌던 CRUD 행위를 매핑시켜서 하자는 것이다.
즉, SQL과 매핑이 되겠지만, URI 호출을 통해서 해당하는 DB의 변화를 가질 수 있게 한 것이다.
아래에 살펴 보겠지만 리소스 중심의 표현, 전달, 접근 방식의 특성으로 인해 리소스 기반 아키텍쳐(ROA) 라고 한다.
서비스 중심의 SOA 와 대응되는 개념으로 일컬어지고 있다.
즉, URI 만 알면 웹서버와 웹 클라이언트의 종류에 상관없이 HTTP프로토콜 만으로 접근 가능한 서비스라 할 수 있겠다.
이러한 단순 명로한 접근 방식 때문에 구글, 야후, 트위터 등 대부분의 웹 2.0 API 가 RESTful 웹서비스로 제공되고 있으며
위젯을 이용한 서비스 매시업(mashup) 을 활성화시킨 원동력이기도 하다.
SOAP? RESTful ??
SOA 기반의 웹서비스는 W3C 의 WS-* 로 일컬어지는 웹서비스 표준들을 통해 실현되고 있으며,
WS-* 표준들은 SOAP을 이용하여 메시지를 전달하고 있다.
그러나 웹서비스 전달 프로토콜인 SOAP은 HTTP 응용 프로토콜로서 SOAP 헤더와 바디로 구성되어 있고,
메시지 송수신시 헤더와 바디의 인코딩/디코딩 과정이 필수이다.
따라서 기본 HTTP 로 메시지를 전달하던 인터넷 서비스 분야에서는
원하는 기능에 비해 SOAP 프로토콜 처리의 오버헤드가 문제가 되었다.
이런 단점을 보완하고자 등장한 구현 기술이 RESTful 웹 서비스이다.
HTTP 의 기본 기능만으로 원격 정보에 접근하자는 것이다.
무조건 RESTful 이 좋다는 것은 아니다.
태생부터가 다른 SOAP과 RESTful 이다.
SOAP 기반의 웹 서비스는 서비스의 기술문서(WSDL)를 매개로 서비스 능력을 개방하고자 한 기술이고,
RESTful 웹 서비스는 URI 를 기반으로 리소스를 개방하고자 하는 기술인 것이다.
SOAP 기반 웹서비스의 요구가 기업의 비지니스 환경에서 응용 서비스 간 상호 운용을 위해 시작된 데 비해,
RESTful 웹 서비스는 인터넷 서비스 업체들이 응용 개발자들에게 손쉬운 데이터 제공을 목적으로 출발했다.
예로 '주분번호 12의 주문 상세 내역을 가져오라' 는 요청은
SOAP 기반 웹 서비스라면 getOrderDetails(order_no=12) 로 호출될 것이며,
RESTrul 웹 서비스라면 http GET/order/12 로 수행할 것이다. 즉 order 12가 리소스로서 GET 메소드로 관련 정보를 얻을 수 있다.
구성요소
기본 구성요소로는 resource, method, representation, stateless
1. resource
자원을 표현하는 것으로 http uri 에 의해 표현되면 웹사이트, 블로그, 이미지, 음악, 이용자, 지도, 검색 결과 등
웹에서 다른 이들과 공유하고자 하는 모든 자원을 의미한다.
예를 들면 123 이라는 ID 를 가지는 특정 붑품을 uri 로 표현하면
http://www.korea.co.kr/item/123 으로 표현이 가능하고 이 제품에 대한 주문은
(기존의 방식 - http://www.korea.co.kr/findItem.jsp?itemId=123 )
www.korea.co.kr/order/123 으로 표현한다.
2. http 메소드 (method)
rest 구조에서 리소스는 http 의 기본 메소드인 get, put, post, delete 만으로 접근할 수 있다.
4개의 메소드는 아래의 설명과 같이 일반 CRUD 오퍼레이션에 대응된다.
HTTP 메소드 |
CRUD 오퍼레이션 |
의미 |
POST |
CREATE |
생성 |
GET |
READ |
검색 |
PUT |
UPDATE |
수정 |
DELETE |
DELETE |
삭제 |
예를들어
1234 라는 부품 정보를 가져오고 싶다면
URL : http://www.korea.com/item/123
Method : GET
2345 라는 부품정보를 생성하고 싶다면
URL : http://www.korea.com/item
Method : Post
<item>2345</item>
1234 라는 부품 정보를 4321 로 변경하고 싶다면
URL : http:://www.korea.com/items/1234
Method : PUT
<item>4321</item>
4321 이라는 부품 정보를 삭제하고 싶다면
URL : http://www.korea.com/items/4321
Method : delete
3. 표현 (representation)
http 기본 메소드로 전달되는 리소스는 다양한 방식으로 표현 되는데 이는 xml, json, html, 텍스트, 이미지 등이 가능하며
클라이언트에서 원하는 형식으로 요청하면 서버에서 이를 처리하게 된다.
리소스의 다양한 표현 방식은 http accept 헤더값 또는 url 파라미터로 지정하면 된다.
예를들어 표현은 URL 을 가지고 결정할 수 있으며
혹은 http 헤더의 contents_negotiation 을 이용하여 결정할 수 있다,
4. Stateless
리소스와 그를 지칭하는 URL, HTTP 메소드로 단일화된 인터페이스, 다양한 리소스 표현 등과 더불어
restful 웹 서비스의 중요한 특징중 하나가 Stateless 이다.
HTTP 의 특성을 상속하여 rest 역시 Stateless 특성을 가지게 되는데
이는 서버측에서 클라이언트 상태 정보를 저장 관리하지 않음을 의미 한다.
클라이언트가 http 요청을 할때 서버에서는 그 요청에 대한 모든 정보를 주어야 하며 이전의 요청에 의존해서는 안된다.
그러나, 웹 서비스 제공시 응용상태와 리소스의 상태관리가 팔요할 수 있으며
이를 위해서 서버와 클라이언트 간에 이들 상태를 명시적으로 전달하는 방법을 이용해야 한다
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.