REST
웹에 존재하는 모든 자원(이미지, 동영상, DB 자원 등)에 고유한 URI를 부여해서 활용하는 것으로, 자원을 정의하고, 자원에 대한 주소를 지정하는 방법론을 의미한다.
따라서 Restful API는 REST 특징을 지키면서 API를 제공하는 것을 의미한다.
등장 배경
어플리케이션의 복잡도가 증가하면서 어떻게 분리하고, 통합하느냐가 주요 이슈가 되었고, 모바일과 같은 다양한 클라이언트가 증가하면서 Backend 하나로 다양한 Device를 대응하기 위해 REST의 필요성이 증대 되었다.
REST의 특징
1. Unifrom(유니폼 인터페이스)
HTTP표준에만 따른다면, 특정 언어나 기술에 종속되지 않고 모든 플랫폼에 사용이 가능하며, URI로 지정한 리소스에 대한 조작이 가능한 아키텍처 스타일을 의미한다.
2. Stateless(무상태성)
HTTP는 Stateless 프로토콜이므로, REST 역시 무상태성을 갖는다. API 서버는 들어오는 요청만을 단순하게 처리하고, 세션과 같은 컨텍스트 정보를 신경쓸 필요가 없어 구현이 단순해진다.
3. Cacheable(캐시가능)
HTTP 기존의 웹 표준을 그대로 사용하므로, HTTP 프로토콜 기반의 로드밸런서나 SSL은 물론이고, HTTP가 가진 가장 강력한 특징 중의 하나인 캐싱 기능을 적용할 수 있다. 일반적인 서비스에서 조회 기능이 주료 사용됨을 감안하면, HTTP 리소스들은 웹 캐시 서버 등에 캐싱하는 것은 용량이나 성능 면에서 이점이 있다.
캐시: 웹 캐시는 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치이다. 웹 요청이 캐시에 도착했을 때, 캐시된 로컬 사본이 존재한다면, 그 문서는 원 서버가 아니라 캐시로부터 제공된다.
캐시의 장점
1) 불필요한 데이터 전송을 줄여서, 네트워크 비용을 줄여준다.
2) 네트워크 병목을 줄여, 대역폭을 늘리지 않고도 페이지를 빨리 불러올 수 있게 된다.
3) 원 서버에 대한 요청을 줄여서, 서버는 부하를 줄일 수 있으며, 더 빠르게 응답할 수 있게 된다.
4) 페이지를 먼 곳에서 불러올수록 시간이 많이 걸리는데, 캐시는 거리로 인한 시간을 줄여준다.
4. Self-Desriptiveness(자체 표현 구조)
동사(Method) + 명사(URI)로 이루어져 있어 어떤 메서드에서 무슨 행위를 하는지 알 수 있으며, 메시지 포맷 또한 JSON을 이용해서 직관적으로 이해가 가능하다.
5. Client-Server 구조
REST API에서 자원을 가지고 있는 쪽이 서버, 자원을 요청하는 쪽이 클라인트에 해당한다. 서버는 API를 제공하며 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)를 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 의존성이 줄어들게 된다.
6. Layered System(계층형 구조)
API 서버는 순수 비즈니스 로직을 수행하고, 그 앞단에 사용자 인증, 암호화, 로드밸런싱 등을 하는 계층을 추가하여 구조상의 유연성을 둘 수 있다.
REST의 구성요소
1. Resource
서버는 유니크한 ID를 가지는 Resource를 가지고 있으며, 클라이언트는 이러한 Resource에 요청을 보낸다. 이러한 Resource는 URI에 해당한다.
2. Method
서버에 요청을 보내기 위한 방식으로 GET, POST, PUT, DELETE가 다. CURD 연산 중에서 처리를 한 연산에 맞는 Method를 사용하여 서버에 요청을 보내야 한다.
3. Representation of Resource
클라이언트와 서버가 데이터를 주고 받는 형태로 JSON, XML, TEXT, RSS 등이 있다. 최근에는 Key, Value를 사용하는 JSON을 주로 사용한다.
RESTful API의 설계
1. 소문자를 사용한다. 대소문자에 차이을 두기 때문에 혼란을 주는 방법은 지양하는 것이 좋다.
2. 하이픈(-)을 사용한다.
3. 확장자를 사용하지 않는다. ex) txt, png, js, vue, jsx 등
4. 밑줄( __ )은 사용하지 않는다.
5. 자원에 대한 행위는 HTTP Method로 표현한다.
GET : GET을 통해 해당 리소스를 조회한다.
POST: POST를 통해 해당 URI를 요청하면 리소스를 생성한다.
PUT: PUT을 통해 해당 리소스를 수정한다.
DELETE: DELETE를 통해 해당 리소스를 삭제한다.
'기타' 카테고리의 다른 글
크로스 브라우징 (0) | 2020.01.10 |
---|---|
함수형 프로그래밍 (0) | 2020.01.10 |
HTTP & HTTPS (0) | 2020.01.04 |
대칭키 & 공개키 & SSL (0) | 2020.01.04 |
TCP - 3way handshake & 4way handshake (0) | 2020.01.04 |