목차

  • REST란?
  • REST를 사용하기 위한 조건
  • 그렇다면 RESTFul 하기위한 조건은?

 

REST란?

- 뜻 그대로 해석하자면 Representational State Transfer 자원의 상태 전달 이라는 뜻이다.

 

REST를 사용하기 위한 조건

- Client, Server 가 서로 독립적으로 분리되어 있어야 한다.

- Stateless. 요청에 대해서 클라이언트의 상태를 서버에 저장하지 않아야 한다.

- Cache. 클라이언트는 서버의 응답을 임시저장 할 수 있어야한다.
클라이언트가 응답을 재 사용할 수 있어야 하며, 이를 통해서 서버의 부하를 낮춘다.

- 계층화. 서버와 클라이언트 사이에 방화벽, 프록시 등 다양한 계층 형태로 구성이 가능해야하며, 이를 확장할 수 있어야 한다.

- 인터페이스 일관성. 인터페이스의 일관성을 지키고 아키텍처를 단순화시켜 클라이언트, 서버가 독립적으로 개선될 수 있어야 한다.

 

그렇다면 RESTFul 하기위한 조건은?

아래의 인터페이스 일관성이 잘 지켜졌는가에 따라서 REST를 잘 지켰다고 볼 수 있다.

 

1. 자원의 식별

웹 기반의 REST 에서는 리소스 접근을 할 때 URI를 사용한다.
ex) https://yunji.com/user/100 

이때 리소스는 user 식별자는 100이 된다.

 

 

2. 메세지를 통한 리소스 조작

Web에서는 다양한 방식으로 데이터를 전달할 수 있는데,
그 중에서 가장 많이 사용하는 방식은 HTML, JSON 등이다.

이 중에서 어떠한 타입의 데이터인지를 알려주기 위해 HTTP Header 부분에 content-type을 통해서 데이터의 타입을 지정해 줄 수 있다. 또한 리소스 조작을 위해 데이터 전체를 전달하지 않고, 이를 메세지로 전달한다.

 

예를들어 서버의 user 정보의 전화번호를 처음에는 number로 설정했다가 이 정보를 client와 주고 받을 때 그대로 사용한다면 후에 서버의 resource가 변경되어 phone-number로 변경할 경우 client는 이를 처리하지 못하고 에러가 발생한다.
이러한 부분을 방지하기 위해 별도의 메세지 형태로 데이터를 주고 받으며 client-server가 독립적으로 확장 가능 하도록 해야한다.

 

3. 자기서술적 메세지

요청하는 데이터가 어떻게 처리 되어져야 하는지 충분한 데이터를 포함할 수 있어야 한다.

HTTP 기반의 REST 에서는 HTTP method와 Header 정보, 그리고 URI 포함되는 정보로 이를 표현할 수 있다.

 

GET https://yunji.com/user/100 --> 사용자의 정보 요청

POST https://yunji.com/user --> 사용자의 정보 생성

PUT https://yunji.com/user --> 사용자의 정보 생성 및 수정

DELETE https://yunji.com/user/100 --> 사용자의 정보 삭제

 

그 외에 담지 못한 정보들은 URI의 메세지를 통하여 표현한다.

 

4. Application 상태에 대한 엔진으로써 하이퍼미디어

REST API를 개발할 때 단순히 Client 요청에 대한 응답만 해주는 것이 아닌 관련된 리소스에 대한 Link 정보까지 포함되어져야 한다.

 

실제로 현업에서 4번의 경우는 많이 사용하지 않고 있으며
보통 위의 1,2,3 세가지가 충족된 경우 RESTFul 하다고 표현하고 이를 REST API라고 한다.

 

 

 

참고

- 패스트캠퍼스 예상국 Backend Developer님 강의(Spring초격차)

 

+ Recent posts