네트워크

REST API

깊게 생각하고 최선을 다하자 2022. 7. 19. 01:45

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