REST가 과연 무엇인가..
REST 웹서비스의 발표를 준비하면서 여기저기서 주어온 정보들을 종합해본다.
내용은 발표형식이니 이해바랍니다.
그럼 시작합니다.
1. REST의 탄생배경으로는 다음과 같습니다.
기존 웹서비스 전달 프로토콜인 SOAP(simple Object Access Protocol)은 HTTP응용 프로토콜로서SOAP 헤더와 바디로 구성되어 있고, 메시지 송수신 시 헤더와 바디의 인코딩/디코딩 과정이 필수입니다. 따라서 기본 HTTP로 메시지를 전달하던 인터넷 서비스 분야에서는 원하는 기능에 비해 SOAP 프로토콜 처리의 오버헤드가 발생하는 문제가 있습니다.
(여기서 오버헤드란, 시스템에서 목적으로 하는 효과를 얻기 위해 본질적인 것은 아니지만 요구되는 작동, 또는 그 때문에 필요한 자원을 말합니다.)
이런 SOAP의 단점을 보완하고자 등장한 구현 기술이 바로 RESTful 웹서비스입니다. RESTful 웹서비스는 REST 기반의 웹서비스를 의미하고, HTTP의 기본 기능만으로 원격 정보에 접근하는 웹 응용 기술입니다.
RESTsms 웹의 창시자 중 한 사람인 Roy Fielding이 그의 박사 학위 논문에서, 현재의 웹 아키텍처가 웹의 본래 설계의 우수성을 활용하지 못하므로 웹의 장점을 최대한 활용할 수 있는 네트워크 기반의 아키텍처를 제안했는데 이것이 REST입니다.
REST는 REpresentational State Transfer의 약어로서 부수적인 레이어나 세션 관리를 추가하지 않고도 HTTP프로토콜로 데이터를 전달하는 프레임워크입니다. 또한 클라이언트/서버 간의 구성요소를 엄격히 분리하여 구현은 단순화시키고 확장성과 성능은 높일 수 있는 아키텍처입니다.
2. REST를 알려면 SOAP와 비교를 하는 것이 가장 쉬운데요.
그럼 SOAP와 REST를 비교해 보겠습니다.
첫째로 서비스구조를 비교해보겠습니다.
보시는 바와 같이 SOAP는 SOA(Service Oriented Architecture)로 서비스 지향 구조에 근거합니다. 이는 서비스 제공자가 UDDI에 레지스트리를 등록하고, 서비스 요청자가 원하는 서비스를 UDDI에서 검색한 후에 서비스를 요청하면 제공자는 그에 응답을 해줍니다. 반면 REST는 ROA(Resource Oriented Architecture) 즉, 리소스 지향 구조를 근거로 합니다. 이는 요청자가 리소스로 요청하면 중간 매체 없이 제공자가 직접 리소스로 응답을 해줍니다. 여기서 리소스(resource)란 REST 아키텍처의 핵심 요소로서 웹사이트, 블로그, 이미지, 음악, 이용자, 지도, 검색결과 등 웹에서 다른 이들과 공유하고자 개방된 모든 자원을 의미합니다. REST 구조에서의 리소스는 그들의 고유한 URI를 가집니다.
서비스 실행 관점에서 살펴본다면, SOAP 기반 웹서비스에서는 서비스 제공자와 요청자 간에 SOAP 프로토콜로 메시지를 주고 받는 방식으로 서비스를 이용합니다. 즉, 서비스 요청자가 웹서비스 요청을SOAP으로 인코딩하여 서비스 제공자에게 전달하면, 서비스 제공자는 이를 디코딩하여 적절한 서비스 로직을 통하여 결과를 얻고, 그 결과를 다시 SOAP 인코딩하여 서비스 요청자에게 반환합니다. 이러한 인코딩/디코딩의 과정에서 오버헤드가 생기게 됩니다. 한편, RESTful 웹서비스는 특정 uri로 리소스를 요청하면 기본 HTTP 프로토콜의 메소드 GET/PUT/POST/DELETE를 이용하여 JSON, XML, RSS 등 다양한 형태로 표현된 리소스를 직접 실어 나릅니다.
서비스 기술적인 요소는 다음 그림으로 확인하겠습니다.
SMTP [ simple mail transfer protocol ] 인터넷 상에서 전자 메일을 전송할 때 쓰이는 표준적인 프로토콜.
WSDL [web Services Description Language] 비즈니스 서비스를 기술하여 비즈니스들끼리 전자적으로 서로 접근하는 방법을 제공하기 위해 사용되는 xml기반의 언어.
WADL [Web Application Description Language] HTTP 기반 웹 응용 프로그램에 대 한 컴퓨터 판독이 가능한 XML 기반의 파일 형식입니다
아래 그림은 고객의 주문을 관리하는 기능을 가지는 웹서비스를 soap와 rest기반이 어떻게 다른지 보여줍니다.
SOAP 기반의 웹서비스에서는 고객의 정보, 주문정보 등을 검색, 변경, 삭제하는 오퍼레이션이 각기 존재하여 필요한 기능을 수행할 때 해당 오퍼레이션을 호출하는 방식으로 일반적인 프로그래밍 개념과 동일합니다.
반면에 RESTful 웹서비스(b)에서는 총주문(/order), id를 가지는 특정 주문(/order/{id}), 총고객(/customers), 고객 한 명을(/customer/{id}) 모두 리소스로 정의하고, 각 리소스에 URI을 할당한 후 URI에 대해 HTTP GET/ PUT/POST/DELETE 오퍼레이션을 수행합니다.
예를 들어, ‘주문번호 25의 주문 상세 내역을 가져와라’라는 요청은 SOAP 기반
웹서비스라면 getOrderDetails(order_no=25)로 호출될 것이며, RESTful 웹서비스라면 http GET/order/25로 수행할 것이다. 즉 order 25가 리소스로서 GET 메소드로 관련 정보를 얻을 수 있습니다.
이와 같이 SOAP 기반의 웹서비스를 사용하고자 할 때에는 웹서비스의 위치(바인딩 주소)뿐 아니라 오퍼레이션을 알아야 하는 반면, RESTful 웹서비스를 사용하고자 할 때에는 대상 리소스의 URI만 파악하면 됩니다. 이것은 모든 RESTful 웹서비스가 HTTP메소드라는 공통의 인터페이스를 이용하므로 가능한 일이라 하겠습니다.
3. 그렇다면 REST는 어떠한 특징을 가지고 있는지 살펴보겠습니다.
REST는 다음 4가지를 꼭 필요로 하기 때문에 별칭으로 need 4 speed라고 붙여보았습니다.
(아는이만 안다. 니드포스피드가 뭔지.. 님하는 아는이?)
첫째로 Addressable Resource : Every "thing" should have a URI
-모든 것은 URI를 가지고 있어야 합니다. 즉, 모든 Resource는 클라이언트가 바로 접근 할 수 있는URI를 가지고 있습니다.
둘째로 Statelessness : scalability and decoupling 확장성과 비동기화입니다.
-웹 어플리케이션이 클라이언트의 상태에 대한 정보를 보관하지 않습니다. 모든 HTTP요청이 완전히 독립적으로 발생합니다. 이는 클라이언트가 매 요청을 할 때마다 필요한 모든 정보를 줍니다.
셋째로 Representation Oriented : Different applications need different formats
-서버는 클라이언트의 time out에 대해 신경 쓸 필요도 없고, 클라이언트가 애플리케이션의 "어디"에 있었는지 기억한 정보를 잃어버릴 일도 없습니다. 클라이언트는 매 요청마다 필요한 모든 정보를 주기 때문입니다. REST에서는 상태가 서버가 아니라 클라이언트에 유지되며 매 요청마다 필요한 정보를 서버에 보냅니다. 이렇게 하면 쉽게 북마크 할 수 있습니다.
마지막 넷째로 Uniform interface : Use the standard methods of the protocol
-모든 Resource는 일반적 http인터페이스인 GET, POST, PUT, DELETE로 접근되어야 합니다.
위의 4가지 특성 때문에 좀더 빠른 웹서비스를 제공할 수 있습니다.
4. 다음은 REST의 장점과 단점을 살펴보겠습니다.
장점으로
a. 기존의 웹 인프라를 그대로 이용할 수 있습니다.
가장 큰 장점중의 하나일 것입니다. 기존 HTTP를 그대로 사용하기 때문에, 원격지원서비스를 할 때도 방화벽을 새로 뚫어야 하는 등의 요건이 없고, L4등의 로드 밸런서 장비들도 그대로 사용이 가능합니다.
b. 무엇보다 웹캐쉬 서버를 그대로 사용할 수 있습니다.
모든 Resource가 URI로 Unique하게 표현되기 때문에, 웹 캐쉬 상에 보관될 수 있고, 특히나SELECT성의 명령은 이 캐쉬에 의해서 실제 Biz Transaction을 타지 않고 바로 리턴 될 수 있기 때문에, 성능과 리소스 활용 측면에서 어마어마한 장점을 가지고 있습니다.
c. 쉽습니다.
웹 서비스와 비교해보면 웹 서비스는 스펙이 정말 많습니다. WS*-I, WS Reliable Messaging, WS Transaction 등등 스펙 덩어리다. 그러나 REST는 별도의 SPEC이 없습니다. 보통 Defector 표준이라고 하는데, HTTP URI와 Method만 잘 지켜서 사용하면 그게 REST입니다.
REST의 단점입니다.
a. REST는 표준이 없다. 즉 관리가 어렵습니다.
REST가 요즘 들어 부각되는 이유 자체가 WebService의 복잡성과 그 표준의 난이도 때문에 Non Enterprise 진영 Google,Yahoo,Amazone등을 중심으로 집중적으로 소개되었습니다. 데이터에 대한 의미 자체가 어떤 비즈니스 요건처럼 Mission Critical 한 요건이 아니었기 때문에 서로 데이터를 전송할 수 있는 정도의 상호 이해 수준의 표준만이 필요했지 Enterprise 수준의 표준도 필요하지 않았고,벤더들처럼 이를 주도하는 회사도 없었습니다.
단순히 많이 사용하고 암묵적으로 암암리에 생겨난 표준 비스무리 한 것이 있을 뿐입니다. 이런 것을Defector 표준이라고 부릅니다.
그런데 문제는 정확한 표준이 없다 보니, 개발에 있어서 이를 관리하기가 어려워진다는 것입니다. 표준을 따르면 몇 가지 스펙에 맞춰서 개발 프로세스나 패턴을 만들수 가 있는데, 이는 표준이 없으니, REST 기반으로 시스템을 설계하자면 사용할 REST에 대한 자체 표준을 정해야 하고, 어떤 경우에는REST에 대한 잘못된 이해로 인하여 잘못된 REST 아키텍쳐에 이건 REST다 라는 딱지를 붙이는 경우가 많습니다. 실제로 WEB 2.0의 대표 주자격인 Flickr.com도 REST의 특성을 살리지 못하면서 RPC 스타일로 디자인한 API를 HTTP + XML을 사용했다는 이유로 Hybrid REST라는 이름을 붙여서REST 아키텍쳐에 대한 혼란을 초래했습니다.
b. REST적인 접근과 설계가 필요합니다.
REST는 SOAP와 같은 프로토콜이 아닙니다. REST는 아키텍쳐입니다.Resource를 기반으로 하는 아키텍쳐이기 때문에 시스템 설계도 Rest 에 맞는 설계가 필요한 것입니다.
5 .REST를 한줄로 요약한다면,
REST는
1. 웹의 모든 리소스를 URI로 표현,
2. 이를 구조적이고 유기적으로 연결하고
3. 비 상태 지향적인 방법으로
4. 일관된 method를 이용하여 리소스를 반환하는 아키텍쳐!!
라고 할 수 있습니다.
감사합니다.(_ _)
[출처] [Web Service] RESTful하다는것, 편하다는것|작성자 가브리엘김
'프로그래밍 > ETC...' 카테고리의 다른 글
RESTful API Service Best Practices (0) | 2018.04.20 |
---|---|
AngularJS React Vue.js (0) | 2018.02.20 |
코딩 테스트 연습할 곳 (0) | 2018.01.27 |
GPL·AGPL·MPL…한눈에 보는 오픈소스SW 라이선스 (0) | 2018.01.21 |
똑똑한 인재만 모아놓은 프로젝트 팀, 결국 산으로 가는 이유 (0) | 2018.01.07 |