[WEB] REST 란 무엇일까
in WEB on Web
요즘은 백엔드 개발자가 REST API를 모른다면,,, 그사람은 아마 백엔드 개발자로서 준비가 덜 된 것이다. 그정도로 API를 만들 때 RESTful 한 API를 만드는 것이 당연해졌는데 오늘은 REST 란 무엇이고 그래서 REST API가 무엇을 의미하는지 알아보자.
1. 들어가기 앞서 API란?
API
제공하는 기능을 제어할 수 있게 만든 인터페이스
API는 데이터를 요청하고 응답하는 것이 전부이다 소스코드와 데이터베이스의 직접적인 접근을 막고, 해당 기능을 사용할 수 있도록 하기 위해 만들어진 것
URL vs URI
결론부터 말하자면 포함되는 관계이다. URI가 상위, URL이 하위 개념이다.
URI는 자원의 위치 표시이며,
URL은 네트워크 상에서 자원의 위치를 표현하기 위한 것으로
프로토콜 + 도메인명 + 파일 위치로 구성된다.
2. REST 란?
REST : 분산시스템 설계를 위한 아키텍처 스타일(제약 조건의 집합)
RESTful : 분산시스템 설계를 위한 아키텍처 스타일(제약 조건의 집합)[REST]을 모두 만족하는 것
RESTful API : REST 아키텍처 원칙을 모두 만족하는 API로 HTTP 프로토콜 장점을 살릴 수 있는 네트워크 기반 아키텍처
REST 가 필요한 이유
- 분산시스템을 위해 (모듈, 기능별로 분리)
- WEB 브라우저 외의 클라이언트를 위해 (멀티플랫폼) -> only 데이터만 보냄
REST 구성요소
- HTTP URL - 자원
- HTTP Method - 행위
- MIME Type - 표현방식 (Response http header의 Content-type)
3. REST 의 특징
1) Uniform (유니폼 인터페이스)
유니폼 인터페이스 : URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말한다.
2) Stateless (무상태성)
작업을 위한 상태 정보를 따로 저장하고 관리하지 않는다. 세션 정보나 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 된다. 때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해진다.
3) Cacheable (캐시 가능)
REST는 HTTP 라는 기본 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용할 수 있다. 따라서 HTTP가 가진 캐싱 기능도 적용이 가능하다. HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag를 이용하면 캐싱 구현이 가능하다.
4) Self-descriptiveness (자체 표현 구조)
REST API 메시지만 보고도 이를 쉽게 이해할 수 있는 자체 표현 구조로 되어 있다.
5) Client-Server 구조
REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로 간 의존성이 줄어들게 된다.
6) 계층형 구조
REST 서버는 다중 계층으로 구성될 수 있으며, 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간 매체를 사용할 수 있게 한다.
4. RESTful 이란?
장점
- 메시지 단순 표현, 확장 유연
- 별도의 장비나 프로토콜 없이 기존의 HTTP 인프라 이용 가능
- server/client 완전 독립적 구현 가능
단점
- 표준, 스키마가 없다 -> API가 만들어지는 이유
- 행위 메소드가 제한적이다.
5. REST API 란?
HTTP 프로토콜 장점을 살릴 수 있는 네트워크 기반 아키텍처
- HTTP URI를 통해 자원을 명시하고, HTTP method를 통해 자원에 대한 처리를 적용하는 API.
- 데이터를 요청받아(HTTP URI + HTTP METHOD) 다양한 형태의 데이터(JSON, XML, RSS)를 반환해주는 것
- HTTP method는 URI에 표시하지 않는다.
- 다양한 형태로 표현된 자원을 반환할 수 있다.
- REST API 를 구현하기 위해서는 HTTP method + 모든 개체 리소스화 + URL 디자인(라우팅) 필요
- 라우팅 : 클라이언트의 요청에 대한 응답을 어떻게 이어줄 것인가를 처리하는 것
- URI를 이용한 접근 : 모든 개체를 리소스로 보고, 리소스에 고유번호를 부여
- URL 디자인 원칙 : 자원에 대한 처리를 주소에 나타내지 않는다(HTTP method는 내부적으로 처리하도록 함), 어떤 자원인지는 주소에 명확하게 나타냄
REST API 가 주목받게 된 배경
SOAP 방식은 복잡하고 확장성이 좋지 못함.
REST 방식은 HTTP method + URI로 데이터를 요청하고 다양한 표현 방식으로 데이터를 반환한다.
6. REST API 구성
- 자원(RESOURCE) - URI
- 행위(Verb) - HTTP METHOD
- 표현 (Representations)
7. REST API 디자인 가이드
REST API 설계 시 가장 중요한 항목은
- URI는 정보의 자원을 표현해야 한다.
- 자원에 대한 행위는 HTTP METHOD(GET, POST, PUT, DELETE)로 표현한다.
8. URI 설계 시, 주의 점
- 슬래시 구분자(/)는 계층 관계를 나타내는 데 사용
- URI 마지막 문자로 슬래시(/)를 포함하지 않는다.
- 하이픈(-)은 URI 가독성을 높이는데 사용자
- 밑줄(_)은 URI에 사용하지 않는다.
- URI 경로에는 소문자가 적합하다.
- 파일 확장자는 URI에 포함시키지 않는다.