본문 바로가기
개발지식/기본

REST에 대하여

by Ligion 2021. 6. 6.


REST란?

 

|  직역 해석

REpresentational State Transfer = 대표(표상)적인 상태 전달

 

> 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고받는 모든 것을 의미한다.

 

Roy Fielding 2000년 박사학위 논문에서 소개됨.
(필딩은 HTTP의 주요 저자 중 한 사람)

HyperText Transfer Protocol = 초본문전송규약
- World Wide Web 상에서 정보를 주고받을 수 있는 통신규약
- Client와 Server 사이에 이루어지는 요청/응답(request/response) 통신규약
- HTML 문서를 주고받는 데에 쓰인다.

 

 전문적 해석

World Wide Web과 같은 분산 HyperMedia System을 위한 Software Architecture의 한 형식

 

> REST는 기본적으로 웹의 기존 기술과 HTTP Protocol을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.

 

 

 구체적 해석

HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.

 

 

 REST의 특징

- HTTP Protocol의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출할 필요가 없다.

- 규칙의 의한 표현을 따랐을 때 의도하는 바를 명확하게 알수 있다.

- Client와 Server의 역할을 명확하게 분리한다.

- 애플리케이션 분리 및 통합 가능

- 다양한 Client의 커버할 수 있다.

 


 

REST 구성

 

 자원(Resource)

모든 자원에는 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
자원을 구별하는 ID는 HTTP URI이다.
Client는 URI를 이용해서 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청한다.

 

 행위(Verb): HTTP Method

HTTP 프로토콜의 Method를 사용한다.
HTTP 프로토콜은 GET, POST, PUT, DELETE 와 같은 메서드를 제공한다.

 

 표현(Representation of Resource)

Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 상태를 응답한다.
REST에서 자원은 JSON, XML, TEXT, RSS 등 여러 형태로 나타내어질 수 있다. (JSON형태가 일반적)

 


 

REST Architecture에 적용되는 6가지 조건


 Uniform Interface

일관적인 인터페이스

 

 Stateless (무상태성)

작업을 위한 상태 정보(세션, 쿠키)를 따로 저장하고 관리하지 않음. 요청만을 처리함.

 

|  Cacheable

웹 표준(HTTP)을 그대로 사용할 수 있기 때문에 HTTP가 가진 caching기능 적용 가능. 잘 관리되는 caching은 client-server 간 상호작용을 부분적으로 또는 완전하게 제거하여 확장성과 성능을 향상한다.

 

|  Layered System (계층형 구조)

Client는 보통 대상 Server에 직접 연결되었는지, 또는 중간 Server를 통해 연결되었는지를 알 수 없다.

중간 Server는 Load Balancing 기능이나 공유 캐시 기능을 제공함으로써 시스템 규모 확장성을 향상하는 데 유용하다.

 

|  Code on demand (주문형 코드)

server에서 client가 실행시킬 수 있는 로직을 전송하여 기능을 확장시킬 수 있다.

optional

 

|  Client/Server 구조

Architecture를 단순화시키고 작은 단위로 분리함으로써 각 파트가 독립적으로 개선될 수 있도록 해준다.

 


 

REST의 목표


 Scalability Of Component Interactions

구성 요소 간 상호작용의 확장성


 Generality of interfaces

인터페이스의 범용성


 Independent deployment of components

구성 요소들의 독립적인 배포


 Intermediary components to reduce latency

중계 구성요소를 통한 응답 지연 감소


 enforce security

보안 강화


 encapsulate legacy systems

레거시 시스템(기존 시스템)의 캡슐화

 


 

REST API란?

 

API (Application Programming Interface)

응용 프로그램(Application)에서 사용할 수 있도록, 

운영 체제(OS)나 Programming Language가 제공하는 기능을 Control 할 수 있게 만든 Interface를 뜻한다.

주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.

 

> 데이터와 메서드로 이루어진 집합을 제공하여 컴퓨터 프로그램 간 상호작용으로 정보교환이 가능하도록 하는 것

 

REST API = REST 기반으로 API를 구현한 것.

 


 

REST API 설계 규칙

 

 자원의 표현은 URI로 한다.

 

- 명사, 소문자

 

- Document 명 = 단수 명사

 

- Collection 명 = 복수 명사 (Server에서 관리하는 자원 저장소)

 

- Store 명 = 복수 명사 (Client에서 관리하는 자원 저장소)

 

GET /users/321

 

 

 자원에 대한 행위는 HTTP Method로 표현한다.

 

 

 

- URI에 HTTP Method가 들어가면 안 된다.

 GET /members/delete/1  -- bad
 DELETE /members/1      -- good

 

- URI에 행위에 대한 동사 표현이 들어가면 안 된다.

GET /members/show/1    -- bad
GET /members/1         -- good

GET /members/insert/2  -- bad
POST /members/2        -- good

 

- 슬래시( / )는 계층 관계를 나타내는 데 사용한다. 마지막에 슬래시( / )를 포함하지 않는다.

https://wr-nood.tistory.com/manage/newpost

 

- 언더바( _ )는 사용하지 않으며 가독성을 높일 때는 하이픈( - )을 사용한다.

https://wr-nood.tistory.com/tropical_fruits/banana/ -- bad
https://wr-nood.tistory.com/tropical-fruits/banana/ -- good

 

- 파일 확장자는 URI에 포함하지 않는다. (Accept header에 확장자 삽입)

https://wr-nood.tistory.com/manage/newpost/photo1.jpg  -- bad
https://wr-nood.tistory.com/manage/newpost/photo1      -- good
(HTTP/1.1 Host: wr-nood.tistory.com Accept: image/jpg)

 


 

RESTful이란?

 

필딩의 REST 원리를 따르는 시스템은 종종 RESTful이란 용어로 지칭된다.

> RESTful 용어는 공식적인 표현은 아니다.

 


 

 

출처

https://ko.wikipedia.org/wiki/REST
https://ko.wikipedia.org/wiki/HTTP
https://ko.wikipedia.org/wiki/API
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

https://meetup.toast.com/posts/92

 

댓글