REST를 구성하는 스타일

이기덕·2022년 6월 22일
2

REST, REST API

목록 보기
2/3
post-thumbnail

REST, REST API(RESTful API)

이전 글에서는 REST에 대한 근본적인 이해를 위해 REST의 구성요소중 Uniform interface에 집중적으로 초점을 맞춰 정리 하였다. 이번에는 REST를 구성하는 각 스타일에 대해 자세히 학습하고 정리하고자 한다.

REST를 구성하는 스타일

REST를 구성하는 스타일은 다음과 같다.

  • client-server
  • stateless
  • cache
  • uniform interface
  • layered system
  • code-on-demand(optional)

Client-Server

Client-Server 디자인 패턴은 separation of concerns(SOC)를 적용하여 클라이언트와 서버가 독립적인 진화를 가능하도록 돕는다.

  • 클라이언트는 서버의 자세한 사항에 대해서 신경 쓸 필요없이 제공되는 인터페이스를 통해 접근하여 응답을 받는다.
  • 서버는 클라이언트의 상태를 신경쓰지 않고 제공한 인터페이스에 대한 처리만 담당하여 요청이 들어올 때 그에 맞는 응답을 제공한다.

Stateless

각각의 요청에 클라이언트의 context가 서버에 저장되지 않는다. 이를 가능하게 하려면 클라이언트는 해당 요청에 포함된 정보만으로 완벽히 이해가 가능하여 서버가 작업을 수행할 수 있도록 해야한다.

Cache

REST는 웹에서 사용하는 기존 인프라를 그대로 활용이 가능하며, HTTP가 가진 캐싱기능이 적용 가능하다.
캐시는 서버의 요청에 대한 응답이 암시적 또는 명시적으로 캐시 가능한지, 불가능한지에 대한 정보를 포함하여야 한다.

Uniform interface

아래 Uniform interface를 구성하는 제약조건 중 self-descriptive messages와 HATEOAS는 이전 글에 자세히 정리하였기 때문에 나머지 2가지 제약조건에 대해서만 정리하고자 한다.

  • identification of resources
  • manipulation of resources through representations
  • self-descriptive messages
  • hypermedia as the engine of application sate(HATEOAS)

indetifacaion of resurces

각각의 리소스는 URI를 구분자로 식별이 가능해야한다. 예를 들면 아래의 코드와 같다.

http://www.example.com/v2/tasks # 할 일들의 collection
http://www.example.com/v2/tasks/2 # id 값이 2인 할 일
http://www.example.com/v2/tasks/14 # id 값이 14인 할 일

manipulation of resources through representations

리소스 자체를 전송하는 것이 아닌 리소스의 표현을 전송한다.
예를 들어, GET http://www.example.com/v2/apple 는 사과 그 자체(리소스)가 아닌 사과를 묘사한 표현를 전송한다. 리소스 자체가 아닌 표현을 사용함으로써 서버의 코드에 얽메이지 않고 client를 구현할 수 있고, 서버의 수정에 거의 영향을 받지 않는다.(최소한 영향을 줄일 수 있다.)

만약 apple이 테이블 이름(리소스) 그 자체를 의미한다면, 테이블 이름이 변경될 경우 클라이언트가 영향을 받아 수정이 필요해진다.

layered system

REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 한다.

Code-on-demand(optional)

REST는 클라이언트가 애플릿 또는 스크립트 형태의 코드를 다운로드하고 실행하여 클라이언트 기능을 확장할 수 있도록 한다.

서버는 클라이언트에게 전달되는 기능의 일부를 코드형태로 제공 할 수 있으며, 클라이언트는 코드를 실행하기만 하면 된다. 이러한 방식은 클라이언트가 미리 구현해야 하는 기능의 수를 줄여 클라이언트를 단순화한다.

Reference

https://restfulapi.net/
https://amazingguni.github.io/blog/2016/03/REST%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4-1
https://meetup.toast.com/posts/92

profile
Kotlin

0개의 댓글