REST (Representational State Transfer)
REST란, 자원을 이름으로 구분하고 해당 자원의 상태를 주고 받는 모든 것을 의미한다.
조금 더 자세히 말하자면, HTTP URL을 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD를 적용하는 것을 의미한다.
REST 구성 요소
REST는 자원, 행위, 표현으로 구성되어 있다.
- 자원(Resource) : URL
자원은 서버에 있는 것으로, DB 안에 들어가 있는 데이터 하나하나를 의미한다.
클라이언트는 URL를 통해 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 서버에 요청한다. - 행위(Verb) : HTTP Method
클라이언트는 HTTP Method(POST, GET, PUT, DELETE)를 이용하여 지정한 자원에 대한 조작을 요청한다. - 표현(Representation of Resource)
클라이언트가 서버에게 자원에 대한 조작을 요청하면 서버는 이에 대한 적절한 응답을 보낸다.
REST에서 하나의 자원은 JSON, XML, TEXT 등 여러 형태의 응답으로 나타낼 수 있다.
REST가 필요한 이유
최근의 서버 프로그램은 다양한 브라우저와 안드로이드폰, 아이폰과 같은 모바일 디바이스에서도 통신할 수 있어야 한다.
이러한 멀티 플랫폼에 대한 자원을 위해 서비스 자원에 대한 아키텍처를 세우고 이용하는 방법을 모색한 결과, REST에 관심을 가지게 되었다.
REST의 장단점
장점
- HTTP 프로토콜의 인프라를 그대로 사용하기 때문에 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없다.
- HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있다.
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
- REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
- 서버와 클라이언트의 역할을 명확하게 분리한다.
단점
- 표준이 존재하지 않는다.
- 사용할 수 있는 메소드가 HTTP Method 4가지 밖에 없다.
- 구현 브라우저가 아직 제대로 지원해주지 못하는 부분이 존재한다.
REST의 기본 원칙 6가지
REST 기본 원칙 6가지를 지키는 것을 RESTful하다고 표현한다.
- 클라이언트-서버 모델
서버와 클라이언트 역할이 분리되어 독립적으로 교체 및 개발될 수 있다.
사용자 인터페이스와 데이터 처리 영역이 분리될 수 있어 유지 보수가 매우 쉬워진다 - 무상태
클라이언트의 context를 서버에 저장하지 않는다.
즉, 세션과 쿠키와 같은 context 정보를 신경쓰지 않아도 되므로 구현이 단순해진다.
서버는 단순히 요청이 오면 응답을 보내는 역할만 수행하며, 세션 관리는 클라이언트에게 책임이 있다. - 캐시 가능
REST는 웹 표준인 HTTP를 그래로 사용하므로 웹에서 사용하는 기존 인프라를 그대로 사용할 수 있다.즉, HTTP가 가진 캐싱 기능을 적용할 수 있다. 캐시 사용을 통해 응답시간이 빨라지고 REST 서버 트랜잭션이 발생하지 않기 때문에 전체 응답시간, 성능, 서버의 자원 이용률을 향상 시킬 수 있다. - 계층화
클라이언트는 REST API 서버만 호출한다.
하지만, REST 서버는 다중 계층으로 구성될 수 있으며, 로드 밸런싱, 암호화 계층을 추가하여 구조 상의 유연성을 둘 수 있고 Proxy, 게이트웨이와 같이 네트워크 기반의 중간 매체를 사용할 수 있다. - 자체 표현 구조
REST API만 보고도 이를 쉬게 이해할 수 있다. - 인터페이스 일관성
URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다.
HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
REST API 디자인 가이드
- URI의 자원명은 소문자를 사용하고, 동사보다는 명사를 사용한다.
- 자원에 대한 행위는 HTTP 메서드를 통해서 표현한다.
- 하이픈(-)은 URI의 가독성을 위해서 사용한다. 밑줄(_)은 사용하지 않는다.
- 슬래시 구분자(/)는 계층 관계를 나타낼 때 사용하며, URI의 마지막 문자로는 사용하면 안된다.
- 파일 확장자는 URI에 포함시키지 않고, Accept header를 사용하여 컨텐츠 타입을 알려준다.
응답 상태 코드
잘 설계된 API는 리소스에 대한 응답을 줘야한다.
- 1XX (정보) : 서버가 요청을 받았으며, 서버에 연결된 클라이언트는 작업을 계속 진행하라는 의미이다.
- 2XX (성공) : 클라이언트의 요청이 성공적으로 수행되었다는 의미이다.
- 3XX (리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요하다.
- 4XX (클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리 할 수 없다.
- 5XX (서버 오류) : 서버가 명백히 유효한 요청에 대한 충족을 실패했다.
'CS > 네트워크' 카테고리의 다른 글
CORS (Cross Origin Resource Sharing) (0) | 2022.10.07 |
---|---|
프록시 (0) | 2022.10.05 |
Scale Out & Scale Up (0) | 2022.10.05 |
JWT (0) | 2022.10.04 |
토큰 기반 인증 (1) | 2022.10.03 |