RESTful 웹서비스란 무언가?

2008. 5. 21. 00:04하루에하나씩/트렌드, 기초 IT 정보

 웹 서비스의 새로운 패러다임 REST(Representational State Transfer)

1) REST란 (ROA는 RESTful 아키텍처)

Web Service는 몇년간 이 세계를 구원할 기술로 각광을 받아왔다. 웹서비스하면 주위의 누구에게라도 물어보면 SOAP을 먼저 이야기할 것이다. 그런데 최신기술의 총아였던 SOAP이 공격받기 시작했다. 그리고 REST가 화두에 올랐다.
2006년부터 크게 이슈가 된 기술이 바로 REST라는 방식의 웹 서비스 입니다. REST는 웹 2.0의 패러다임으로 등장했던 Open API 보다 간단하게 제공하기 위해서 사용되었던 방식입니다. REST는 2000년도에 외국의 어떤 박사의 학위 논문에서 처음으로 제안되었습니다. 그 당시는 대규모의 네트워크 시스템을 위한 방법이라는 뜻으로 발표한 것이었지만 최근 이용되고 있는 REST는 HTTP와 XML을 이용하여 데이터를 주고 받는 웹 서비스를 이용하는 것으로 쓰이고 있습니다.
실제 구글에서는 더 이상 SOAP을 이용한 서비스를 지원하지 않는다고 하고(물론 기존 서비스는 유지하겠지만) 아마존에서 제공하는 SOAP과 REST 서비스에서 REST가 우월하게 많이 사용한다는 이야기를 보았다.
이미 SOAP이 CORBA와 같은 기술과 같이 서서히 지고 있다고 믿고 있는 사람들도 많다. (
http://www.ibm.com/developerworks/kr/library/x-xml2007rvw.html?ca=dnn-krt-20080220)


REST 방식의 웹 서비스를 쉽게 이해하기 위해서 어떻게 메시지를 주고 받게 되는지 동작 아키텍처를 살펴보도록 하겠습니다.
먼저 기존의 SOAP을 이용한 일반적인 웹 서비스 방식은 다음과 같습니다.

[일반적인 웹 서비스]

사용자 삽입 이미지
 반면에 REST는 URL을 요청하게 됩니다. 복잡한 SOAP 메시지를 호출하지 않아도 URL을 이용해서 데이터를 요청해야 한다는 것이죠.

[REST 방식의 웹 서비스]

사용자 삽입 이미지
위의 그림을 보면 12133이라는 URL을 통하여 데이터를 요청하고 있고 그 데이터는 XML 형식으로 반환하게 됩니다. 반환되는 XML 형식은 다음과 같습니다.
 
 
http://blog.hoons.kr/member/12133
 
[GET 요청]
 
 
<ArrayMember
 xmlns=”http://schemas.datacontract.org/2004/07/wcf“
xmlns:i=http://www.w3.org/2001/XMLSchema-instance>
    <member>
      <name>HOONS</name>
      <birth>1983</birth>
    </member>
</ArrayMember>
 

[반환데이터]

2) REST의 특징

1)  REST 방식의 웹서비스는 잘 정의된 Cool URI로 리소스를 표현한다.
무분별한 파라미터의 남발이 아니라, 마치 오브젝트의 멤버변수를 따라가듯이~
http://www.naver.com/Hoons/1983/
http://www.naver.com/ArrayMember.jsp?name=HOONS&birth=1983

2) REST 방식의 웹서비스는 세션을 쓰지 않는다는 거다.
기존의 서블릿 개발에서는 세션을 이용해서 인증 정보들을 가지고 다닌다. 개발자의 개념(?)에 따라서는 파라미터까지 마구마구 집어넣어서 사용하기도 한다. 이 때문에 요청 처리가 너무너무 무거워진다. 또한 요청간의 전후관계에 관련성이 생기기 때문에 한 세션의 일련의 요청을 하나의 서버가 처리해야 한다. 그래서 로드발란싱을 위해 고가의 로드발란싱 서버가 필요하게 된다. 하지만 REST는 세션을 사용하지 않기 때문에 각각의 요청을 완벽하게 독립적이다. 따라서 각각의 요청은 이전 요청과는 무관하게 어떠한 서버라도 처리할 수 있게 된다. 즉! 로드발란싱이 간단해 질 것이라는 것이 느낌이 오는가? (물론 인증 관련해서 복잡한 문제도 생긴다.)

3) REST란 4가지 속성을 지향하는 웹서비스 디자인 표준이다.
 ROA는 웹의 모든 리소스를 URI로 표현하고 , 모든 리소스를 구조적이고 유기적으로 연결하여, 비 상태 지향적인 방법으로 정해진 method만을 사용하여 리소스를 사용하는  아키텍쳐 이다.

* Addressablilty (주소로 표현 가능함)
 - 제공하는 모든 정보를 URI로 표시할 수 있어야 한다.

* Connectedness (연결됨)
 - 일반 웹 페이지처럼 하나의 리소스들은 서로 주변의 연관 리소스들과 연결되어 표현(Presentation)되어야 한다.

* Statelessness (상태 없음)
 - 현재 클라이언트의 상태를 절대로 서버에서 관리하지 않아야 한다.(REST에서는 상태가 서버가 아니라 클라이언트에 유지되며 매 요청마다 필요한 정보를 서버에 보낸다.)
 - 모든 요청은 일회성의 성격을 가지며 이전의 요청에 영향을 받지 말아야 한다.
 - 세션을 유지 하지 않기 때문에 서버 로드 밸런싱이 매우 유리하다.
 - URI에 현재 state를 표현할 수 있어야 한다. (권장사항)

* Homogeneous Interface (동일한 인터페이스)
 - HTTP에서 제공하는 기본적인 4가지의 method와 추가적인 2가지의 method를 이용해서 리소스의 모든 동작을 정의한다.
 - 대부분의 리소스 조작은 6가지의  method를 이용하여 대부분 처리 가능하다. 만일 이것들로만 절대로 불가능한 액션이 필요할 경우에는 POST를 이용하여 추가 액션을 정의할 수 있다. (되도록 지양하자)

REST는 . 웹의 모든 리소스를 URI로 표현하고 . 이를 구조적이고 유기적으로 연결하여 . 비 상태 지향적인 방법으로 . 일관된 method를 사용하여 리소스를 사용하는 웹 서비스 디자인 표준이다.





참조 : Hoons 블로그 .NET으로 구현 :  http://blog.hoons.kr/blog_post_22.aspx
           RESTful(GET) java로 구현 : http://openframework.or.kr/JSPWiki/Wiki.jsp?page=RESTfulWebServiceGET
           RESTful 웹서비스 알아보기 : http://www.iamcorean.net/22