1. REST (REpresentational Safe Transfer)?
웹에 존재하는 모든 리소스(이미지, 동영상, DB)에 고유한 URI를 부여해 활용하는 것으로, 리소스를 정의하고 리소스에 대한 주소를 지정하는 방법론을 의미한다.
2. REST의 탄생
REST는 웹의 창시자(HTTP) 중의 한 사람인 Roy Fielding의 2000년 논문에 의해서 소개되었다. 현재의 아키텍쳐가 웹의 본래 설계의 우수성을 많이 사용하지 못하고 있다고 판단하면서 웹의 장점을 최대한 활용할 수 있는 네트워크 기반의 아키텍쳐를 소개하면서 REST가 대두되었다.
REST가 대두되기 시작한 큰 이유는 '애플리케이션 분리 및 통합', '다양한 클라이언트의 등장'이다. 애플리케이션의 복잡도가 증가하면서 애플리케이션을 어떻게 분리하고 통합하느냐가 주요 이슈가 되었고 하나의 백엔드 Back-end에서 다양한 클라이언트, 즉 디바이스 Device에 대응하기 위해 중요성이 높아졌다.
3. REST의 구성
- 자원 (Resource) - URI
- 행위 (Verb) - HTTP Method
- 표현 (Representation of Resource)
ex)
- /users GET : 유저 정보를 가져 옴
- /users/{id} GET : 특정 id의 유저 정보를 가져 옴
- /users PUT : 유저 정보를 수정함
① 자원(Resource): URI
모든 리소스에 고유한 ID가 존재하고, 이 자원은 서버에 존재한다. 리소스를 구별하는 ID는 `/groups/:group_id`와 같은 HTTP URI다. 클라이언트는 URI를 이용해서 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 서버에 요청한다.
② 행위(Verb): HTTP Method
HTTP 프로토콜의 Method를 사용한다. HTTP 프로토콜은 GET, POST, PUT, DELETE 와 같은 메서드를 제공한다.
③ 표현(Representation of Resource)
클라이언트가 리소스의 상태(정보)에 대한 조작을 요청하면 서버는 이에 적절한 응답(Representation)을 보낸다. REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 응답으로 나타내어 질 수 있다. JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다.
4. REST의 특징
① Uniform (유니폼 인터페이스)
HTTP 표준에만 따른다면, 안드로이드/IOS 플랫폼이든, 특정 언어나 기술에 종속되지 않고 모든 플랫폼에 사용이 가능하며, URI로 지정한 리소스에 대한 조작이 가능한 아키텍처 스타일을 의미한다.
② Stateless (무상태성)
서버 측에서 수행의 컨텍스트(Context) 정보를 저장하지 않는다. 즉, 이전에 어떤 요청을 했는지 같은 정보를 저장하지 않고 독립적으로 처리된다. 세션과 같은 컨텍스트 정보를 신경 쓸 필요가 없어 구현이 단순해진다. 필요하다면, 클라이언트가 자체적으로 관리하여야 한다.
③ Cacheable (캐시 가능)
HTTP 프로토콜을 사용하기 때문에 기존 웹 인프라를 그대로 사용 가능하다. 웹 브라우저에서 HTTP 캐시를 이용하는 것처럼 동일하게 이용이 가능하다. 같은 URI에 대한 요청이 여러번 있을 때 URI 리소스를 매번 서버로 요청하지 않고 클라이언트의 HTTP 캐시에서 미리 가져온 정보를 반환한다.
④ Self-descriptiveness (자체 표현 구조)
REST API 메시지 그 자체로 쉽게 이해할 수 있어야 한다. 별도의 주석이나 문서가 없어도 특정 REST API가 원하는 바를 쉽게 이해할 수 있어야 한다.
⑤ Client-Server Architecture (클라이언트 서버 구조)
REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보 등)을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 된다.
⑥ Layered System (계층형 시스템)
클라이언트는 대상 서버에 직접 붙었는지 중간에 존재하는 서버와 통신하는지 알 수 없다. API Server는 순수 비즈니스 로직을 수행하고 그 앞단에 보안, 로드밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상의 유연성을 줄 수 있다. 또한 로드밸런싱, 공유 캐시 등을 통해 확장성과 보안성을 향상시킬 수 있다.
1. RESTful API?
REST는 위 정의들을 구현하는 방식에 제약을 두지 않기 때문에 구체적인 가이드라인이 없다. 하지만 RESTful이라는 개념을 통해 그 가이드라인이 제시된다. 즉, REST API의 설계 의도를 정확하게 지켜주는 API를 RESTful API라고 부른다.
RESTful API를 구현하는 근본적인 목적은 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이다.
2. RESTful API Design 가이드
다음 2가지 항목을 중점적으로 설계해야 한다.
첫 번째, URI는 정보의 리소스를 표현해야 한다. (리소스 명은 동사보다 명사를 사용)
두 번째, 리소스에 대한 행위는 HTTP Method(GET, POST, PUT, PATCH, DELETE)로 표현한다.
2.1 URI 설계 시 주의해야할 점
① 슬래시 구분자(/)는 계층 관계를 나타내는데 사용한다.
② URI 마지막 문자로 슬래시(/)를 포함하지 않는다.
③ 하이픈(-)은 URI 가독성을 높이는데 사용
④ 밑줄(_)은 URI에 사용하지 않는다.
⑤ URI 경로에는 소문자가 적합하다.
⑥ 파일확장자는 URI에 포함하지 않는다.
2.2 HTTP Method의 알맞은 역할
GET - 리소스를 조회한다.
POST - 리소스를 생성하거나 저장한다.
PUT - 리소스를 전체 수정한다.
PATCH - 리소스를 일부 수정한다.
DELETE - 리소스를 삭제한다.
'Road to Web Developer > Network' 카테고리의 다른 글
HTTP Status Code (0) | 2019.01.17 |
---|---|
URI / URL / URN (0) | 2019.01.16 |
HTTP 개념 및 주요 내용 정리 (0) | 2019.01.08 |
인터넷(Internet)과 웹(Web) (0) | 2019.01.08 |