RESTful 이란?

RESTful 이란?

MEAN스택으로 구현된 훌륭한 소스를 찾았는데, RESTful한 구조로 되어있었다. 코드를 살펴보면서 기본 구조인 RESTful에 대해서 공부하는 것이 코드를 이해하는데 도움이 될거라고 생각했다.

RESTful은 지금 웹환경에서 필수적으로 알아야 할 용어인것 같다. 모든 서비스 아키텍처가 반드시 Restful해야 하는것은 아니지만 분명 어떤 서비스에는 좋은 선택이 된다.


REST(REpresentational State Transfer)는 웹과 같은 환경을 설계하는 데있어서 아키텍쳐의 종류이다. 그 전까지의 웹 환경이 설계의 장점을 잘 살리지 못하고 있다고 판단한 Roy Fielding(http 저자중 한명)이 2000년 논문에서 소개했다. 하지만 최근들어(사실 이제 최근도 아니다) 클라이언트의 다양성이 증가하면서 주목받고 있다.

이 전의 아키텍쳐에서는 클라이언트가 요청을 보낼 때 주로 POST method를 사용했다. 예를 들면

POST/url?method=create
POST/url?method=insert
GET/url?method=update

다음과 같은 URI구성은 REST라고 볼 수 없다. http method는 여러가지 종류가 있다. RESTful한 설계는 목적에 맞는 method를 적절히 사용한다.

RESTful의 특징

RESTful에는 크게 여섯가지 특징이 있다.

  • Client-Server RESTful의 가장 기본적이면서 당연한 특징으로, 클라이언트는 적절한 요청을 보내고 서버는 REST하게 클라이언트가 필요한 리소스를 제공한다는 것이다.
  • Uniform interface(Platform Agnostic) REST하게 설계되어있으면 플랫폼에 관계없이 사용할 수 있다. 운영체제에도 구애받지 않고 언어에도 구애받지 않는다. HTTP를 준수하는 플랫폼이라면 어디에서나 사용할 수 있다.
  • Stateless state, 즉 상태를 서버에 저장하지 않는다. 서버는 요청만 처리할 뿐 따로 클라이언트의 컨텍스트를 저장하지 않는다. 따라서 세션의 사용을 지양하게된다. 서버의 리소스사용이 줄어들고 구현을 단순화 할 수 있다.
  • Cacheable http표준을 사용하기 때문에 웹캐시를 사용할 수 있다. 리소스를 캐싱해서 서버의 트랜잭션을 줄일 수 있다.
  • Layered System 서버와 클라이언트간에 미들웨어를 사용할 수 있다. 미들웨어는 요청과 응답을 방해하지 않는 선에서 서버와 클라이언트간에 유연성을 가지게 할 수 있다.
  • Self-descriptiveness RESTful의 가장 큰 특징이자 주목받게 된 이유이다. RESTful은 그 자체로 기술되어진다. 요청만 보고도 어떤 일을 하는지 파악할 수 있다. 직관적이어서 사람이 이해하기 쉽고 semantic하다.

https://beyondj2ee.wordpress.com http://bcho.tistory.com/953 http://www.guru99.com/restful-web-services.html