케네스로그

[WEB] Rest, RestAPI, Restfulness 본문

Dev/WEB

[WEB] Rest, RestAPI, Restfulness

kenasdev 2023. 1. 4. 19:42
반응형

REST

REST: Representational State Transfer

자원을 이름으로 구분하여 해당 자원의 정보(state)를 주고 받는 행위를 의미한다

HTTP URI를 통해 자원을 명시하고, HTTP Method를 통해 해당 자원에 대한 CRUD 동작을 적용하는 것

REST의 구성

자원(Resource) - URI

모든 자원에 고유한 ID가 존재하며, 이 자원은 Server 상에 존재한다.
URI를 통해 자원을 구별한다.

행위(Verb) - Method

HTTP 프로토콜의 Method를 통해 자원에 대한 조작을 수행한다.
ie. GET, POST, PUT and so on

표현(Representation)

REST에서 자원은 JSON, XML, TEXT, RSS등의 다양한 형태로 표현될 수 있다.
보통은 JSON 이나 XML을 통해 데이터를 주고 받는다.


특징

Uniform - 유니폼 인터페이스

REST는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍쳐 스타일이다.

Stateless - 무상태성

서버는 작업에 관한 정보를 따로 저장 및 관리하지 않는다.
세션 정보나 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에, API서버는 클라이언트로부터 받은 요청에 대한 동작만을 처리하게 된다.
즉, 상태 변화에 대해 서버는 관여하지 않고 오로지 클라이언트단으로 책임을 전가한다.

Cacheable - 캐시가능

REST는 HTTP라는 웹 표준을 그대로 사용하기에 Last-modified, E-Tag와 같은 태그를 통해 캐싱 구현이 가능하다.
따라서 캐싱이 가능/필요한 데이터라면 클라이언트 단에 저장해두고 이후에 같은 요청에 대해 해당 데이터를 로드하도록 한다.

Client-Server

서버는 API제공, 클라이언트는 사용자 인증 및 컨텍스트 관리에 대한 역활이 명확히 구분되어 서로 간의 의존성이 줄어들게 된다.
다양한 플랫폼을 통해 서버와 통신하는 최근 서비스 형태에서 큰 장점으로 부각된다.

Layered System - 계층적 구조

REST 서버는 다중 계층으로 구성될 수 있습니다.
로드밸런싱, 암호화 계층 등을 추가해서 구조 상으로 유연하게 설계할 수 있고, 프록시와 게이트웨이 같은 네트워크 기반의 중간 매체를 사용할 수 있다.
클라이언트 입장에서는 끝단의 서버와 연결되는지 중개 서버가 존재하는지 알 수 없다.


규칙


REST의 Stateless, Connectionless

HTTP는 클라이언트와 서버 사이에서 이루어지는 요청과 응답 프로토콜을 말한다.
이 HTTP는 비연결성 & 무상태라는 특성을 지니고 있습니다.


Connectionelss(비연결성) 클라이언트가 요청을 하고, 서버가 요청에 대한 응답을 하게 된 후 연결을 끊는 성질
Stateless(무상태) 서버는 요청에 대해 독립적으로 수행하며, 이전 요청에 대한 정보를 저장하지 않는 특징


왜 비연결성 & 무상태성?

독립적으로 요청과 응답을 처리함으로써 서버가 단순해지며, 상태를 저장해야 하는 부담을 피할 수 있다.


한계점

클라이언트-서버 사이에 이전의 요청에 대한 정보가 필요한 경우가 있다. 인증과 인가
이를 쿠키 또는 세션을 통해 극복할 수 있다.

쿠키는 브라우저에 있는 저장소로, 헤더에 해당 값을 통해 포함시켜 요청을 보낼 수 있다.
세션은 서버 저장소를 사용하는 것으로, 서버 값을 가지게 되어 '상태'라는 것이 존재하게 된다.


상태가 있다면 RESTful 하지 않은 것?

a. REST에서 이야기하는 무상태성은 서버에 대한 특징을 이야기하며, 클라이언트가 상태를 저장하는 행위에 대해서 REST를 위반했다고 말할 수 없다.

b. REST가 만능한 종교가 아닙니다. API에 대한 보안을 위해 trade-off가 필요할 수 있다.

c. 토큰을 활용한 인증(쿠키)는 Restful하다고 할 수 있습니다. 쿠키는 클라이언트 측 저장기술이기에 서버가 유저에 대한 정보를 저장할 필요가 없기떄문이다.

d. 세션은 서버 저장소에 세션 정보를 저장하기에 Restful하지 않다고 할 수 있습니다. 또한, 세션의 경우 scaling에 어려움이 존재한다.

관련 링크
Do sessions really violate RESTfulness?
https://stackoverflow.com/questions/6068113/do-sessions-really-violate-restfulness

반응형

'Dev > WEB' 카테고리의 다른 글

[WEB] HTTP 버전 별 특징  (0) 2023.01.12
[HTTP] HTTP 캐시 & 조건부요청  (0) 2023.01.10
[WEB] HTTP와 웹의 동작과정  (1) 2023.01.03
[WEB] TCP/UDP  (0) 2023.01.03
[WEB] HTTP  (0) 2023.01.03