REST API
1) REST API란?
- REST API란 HTTP 프로토콜에서 사용되는 네트워크 아키텍쳐입니다. 2001년 로이 필딩이라는 컴퓨터 과학자에 의해 처음 제안되었으며, 현재는 HTTP 프로토콜과 함께 가장 보편적으로 사용되고 있습니다.
2) 왜 네트워크 아키텍쳐인가?
- 1990년도 초반에 웹의 사용량이 폭발적으로 증가함에 따라, 웹 인프라의 정비에 대한 필요성이 대두 되었습니다.
왜냐하면 초기의 HTTP는 네트워크적인 특성이 빈약했기 때문입니다.
따라서 웹의 이용을 안정적이고 효율적으로 지원하기 위해서 네트워크 아키텍쳐가 필요했습니다.
3) REST API의 특징
- REST API는 크게 6가지 특징을 갖고 있습니다. 그리고 이러한 제약 조건을 잘 준수해서 설계된 REST API를
RESTful하다고 합니다.
각각에 대해서 하나씩 살펴보겠습니다.
(1) Client-Server
- 첫 번째 제약 조건은 클라이언트-서버 구조입니다. 이를 다른 말로 '관심사의 분리'라고도 합니다.
네트워크 아키텍쳐의 관점에서 클라이언트-서버의 장점은 크게 2가지입니다.
첫째는, 유저 인터페이스의 이식성(portability) 향상입니다. 클라이언트-서버 구조에서는 하나의 유저 인터페이스가 여러 서버 플랫폼에 대응할 수 있으므로, 이식성이 향상됩니다.
둘째는, 서버의 확장성(scalibility)의 향상입니다. 클라이언트-서버 구조에서는 서버 구조를 단순화함으로써 서버의 확장성을 쉽게 향상시킬 수 있습니다.
(2) Stateless
- 두 번째 제약 조건은 Stateless입니다. Stateless는 말 그대로 '상태를 저장하지 않는다'는 의미입니다.
Stateless의 특성을 통해 얻을 수 있는 이점은 크게 3가지입니다.,
그것은 가시성(Visibility), 신뢰성(Reliability), 확장성(Scalibility) 입니다.
(2-1) 가시성(Visibility)
Rest API의 Stateless한 특성으로 인해서 클라이언트는 한 번의 요청에 온전한 정보를 담아야 합니다.
이는 요청을 수용하는 서버 입장에서 해당 요청 이외의 정보를 확인할 필요가 없으므로,
가시성이 향상된다고 할 수 있습니다.
(2-2) 신뢰성(Reliability)
위에서 언급했듯이 클라이언트는 한 번의 요청에 온전한 정보를 담아서 서버에 요청해야 합니다.
이는 요청의 부분 실패로 인한 추가 작업을 발생시키지 않으므로,
서버 입장에서는 클라이언트의 요청에 대한 신뢰성이 향상됩니다.
(2-3) 확장성(Scalibility)
- 클라이언트의 요청들 사이에 상태를 저장할 필요가 없으므로, 클라이언트의 요청을 수행할
서버를 쉽게 교체할 수 있습니다.
그리고 이는 확장성의 향상으로 이어질 수 있습니다.
반면, Stateless로 인한 단점도 존재합니다. 그것은 클라이언트의 요청마다 중복된 데이터를 반복적으로 보냄으로 인해 네트워크 성능이 저하될 수 있다는 점입니다.
(3) Cache
- REST API는 cache를 활용함으로써, 네트워크 통신의 효율을 향상시킵니다.
반면, cache로 인한 단점도 있는데 cache에 있는 데이터가 오래됨으로 인해,
서버에 있는 데이터와 불일치되는 것을 주의해야 합니다.
(4) Uniform Interface
- REST API를 다른 네트워크 아키텍쳐와 가장 구분짓는 특징이 바로 'Uniform Interface'입니다.
Uniform Interface의 장점은
(1) 전체적인 네트워크 아키텍쳐가 단순화(simplified)되고,
(2) 클라이언트-서버의 상호작용에 대한 가시성(Visibility)이 향상된다는 점입니다.
(5) Layered System
- REST API의 Layered System은 2가지 장점을 가지는데,
그것은 독립성(Independence)와 확장성(Scalibility)입니다.
(5-1) 독립성(Indepedence)
- REST API는 시스템에 대한 지식을 단일 레이어로 제한함으로써,
전체 시스템 복잡성을 제한하고, 독립성을 촉진합니다.
(5-2) 확장성(Scalibility)
- REST API는 중개자를 사용하여 서비스의 로드 밸런싱을 가능하게 함으로써 확장성을 촉진합니다.
4) 결론
- REST API는 우리가 일반적으로 알고 있는 HTTP-based API(ex) GET, POST, UPDATE, DELETE)와 같은 것이 아닙니다. REST API는 훨씬 더 엄격한 제약 조건을 의미하며, 로이 필딩 또한 모든 경우에 Restful하게 API를 설계할 필요는 없다고 말합니다.
REST API에 대해 공부함으로써 고민해볼 수 있는 것은
'바람직한 네트워크 아키텍쳐는 어떤 특성을 가져야 하는가?',
'네트워크 아키텍쳐의 제약 조건으로 인한 trade-off는 무엇인가?'
와 같은 질문입니다.
참고
Fielding Dissertation: CHAPTER 5: Representational State Transfer (REST) (uci.edu)
(266) [10분 테코톡] 정의 REST API - YouTube