Representaional State Transfer
웹프로토콜(HTTP)을 활용하여, Resource 중심으로 연동 인터페이스 구조를 제안한 것입니다.
웹이전에 돌아가서 ( 클라이언트 - 서버 ) 연동 문제가 어떻게 해결되었는지 부터 알아야 합니다.
개발의 기본은 라이브러리화 하는 것입니다.
이렇게 함으로써의 이점은 소스코드를 재활용할수 있으며,
나 혼자가 아닌 다른 사람들도 이어서 개발을 할수 있는 기반이 됩니다.
하지만 하나의 컴퓨터에서나 처리가 가능할 뿐 네트웍을 넘어갈 수는 없습니다.
A컴퓨터에서 B컴퓨터에 있는 라이브러리를 호출할수 없었습니다.
네트웍에 호출 받을수 있도록 작업을 하기 시작합니다.
그게 RPC데몬 (Remote Procedure Call) 약자로 유닉스에서 사용되었습니다.
RPC는 보안에 문제가 있었으며, 네트웍 자원 활용이나 함수를 동적으로 사용하는 데 제약이 있었습니다.
이 문제를 해결하기 위해 도입한 것은 CORBA 입니다.
CORBA는 A컴에 있는 C++ 프로그램이 B컴에 있는 자바 서버의 함수도 호출할 수 있게 한다는 그런 취지 입니다.
원리는 IIOP라는 프로토콜을 통해서, 프로그램 언어에 상관없이 인터페이스를 정의(IDL)하고, 그걸 기반으로 각 언어에서
CORBA 플렛폼을 통해 개발하면 C++로 짜여진 함수도 자바에서 호출할 수 있었습니다.
CORBA는 무겁고 비쌌으며 서버쪽 H/W어느정도 속도도 되어야 했으므로 잘 사용하지 않게 되었습니다.
JAVA에서는 RMI(RPC의 자바버젼)이 나왔지만 네트웍 연동은 쉬웠지만 방화벽에 늘 상 걸렸습니다.
그래서 HTTP로 무엇인가 연동하는 방안을 고민했고
그건 바로 XML과 HTTP를 결합한 SOAP기반의 웹서비스였습니다.
SOAP는 HTTP를 활용할 수 있었으므로 방화벽문제는 어느정도 해결했습니다.
SOAP기반의 웹서비스는 서비스지향 구조(Service-Oriented Architecture)SOA로
SOA는 서비스를 자유자재로 정의할 수 있다는 게 매력인 동시에 그만큼 복잡해질 수도 있다는 게 문제였습니다.
즉 서비스를 정의하는 것 자체도 WSDL이란 놈을 만들어 함수명부터 시작, 매개변수, 결과값
세부적인 사항 하나하나 정의합니다. 그리고 이를 UDDI(인터넷에서 DNS같은 것)이라 놈을 등록해서
외부에서 발견할 수 있게 하는 구조였습니다.
서비스지향으로 바라보기 보다는 리소스기반(Resource-Oriented Architecture)ROA으로 정의하면
어떻겠느냐는 아이디어가 나옵니다.
웹이란 자체가 리소스기반입니다. 웹에서 모든 문서, 객체를 대상으로 Http Get하는게 기본조작입니다.
웹에서 사용하는 HTTP Primitive (GET, PUT, POST, DELETE)를 그대로 쓸수 있지 않겠냐고 해서 그게 바로 REST입니다.
REST는 SOAP기반의 웹서비스인 SOA와 대비되는 자원기반은 ROA 연동방식입니다.
ROA는 더 확장해서 WOA(Web Oriented Architecture)로 발전됩니다.
REST는 네트웍상에서 원격에 있는 서버의 서비스(API)를 사용할수 있게 그것도 방화벽이라는 제약을 넘어서
가능하게 하자는 취지에서 나왔습니다.
서비스지향(SOAP)웹서비스도 있었으나 REST는 좀 더 실용적인 접근을 했고, 그 실용성을 이해하기 쉬운 Http의 Verb, request, response를 그대로 사용한다는 특정 덕에 각광받는 Open API 방식이 되었습니다.
[펌] http://blog.daum.net/aqua0405/5558396