Heestory

기술 대비 ) REST , RESTful API 본문

개발(~국비)/기술면접

기술 대비 ) REST , RESTful API

까만밀가루 2022. 8. 18. 12:08

RESRful API란 

REST의 특징을 기반으로 서비스 API를 구현한 것으로, HTTP 통신에서 어떤 차원에 대한 CRUD 요청을 Resource과 Method를 통해 표현하여 특정한 형태로 전달하는 방식입니다.

여기서 Resource는 URI를 의미하고 Method는 GET,POST,DELETE,PATCH,PUT등이 있습니다.

자원과 메소드로 이루어진 API는 주소에서 직관적으로 분리되어 있기 때문에 요청을 보내는 주소만으로도 어떤 것을 요청하는지 파악이 가능하다는 특징이 있습니다.

 

그 외 RESTful API

Message는 Header와 Body를 명확히 분리하여 사용한다.

API 버전을 관리 할 수 있어야 한다.

서버와 클라이 언트가 같은 방식을 사용하여 요청하도록 한다.

 

장점

Open API를 제공하기 쉽고, 멀티 플랫폼 지원과 연동이 쉽다.

원하는  타입으로 데이터 송수신할 수 있다. 기존 웹 인프라(HTTP)를 사용한다.

단점

사용할 수 있는 메소드가 적다. 분산 환경에 부적합하다. HTTP 통신 모델에 대해서만 지원한다는 것입니다.

 

REST의 특징

1. Server-Client (서버-클라이언트 구조)

  • 자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client가 됩니다.
    • REST Server는 API를 제공하고 비즈니스 로직 처리 및 저장을 책임지고,
    • Client는 사용자 인증이나 context( 세션, 로그인 정보 ) 등을 직접 관리하고 책임집니다.
    • 역할을 확실히 구분시킴으로써 서로 간의 의존성을 줄입니다.

2. Stateless (무상태)

  • HTTP 프로토콜은 Stateless Protocol이므로 REST 역시 무상태성을 갖습니다.
  • Client의 context를 Server에 저장하지 않습니다.
    • 즉, 세션과 쿠키와 같은 context 정보를 신경쓰지 않아도 되므로 구현이 단순해집니다.
  • Server는 각각의 요청을 완전히 별개의 것으로 인식하고 처리합니다.
    • 각 API 서버는 Client의 요청만을 단순 처리합니다.
    • 즉, 이전 요청이 다음 요청의 처리에 연관되어서는 안됩니다. ( DB에 의해 바뀌는 것은 허용 )
    • Server의 처리 방식에 일관성을 부여하기 때문에 서비스의 자유도가 높아집니다.

3. Cacheable (캐시 처리 기능)

  • 웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있습니다.
    • 즉, HTTP가 가진 가장 강력한 특징 중 하나인 캐싱 기능을 적용할 수 있습니다.
    • HTTP 프로토콜 표준에서 사용하는 Last-Modified Tag 또는 E-Tag를 이용해 캐싱을 구현합니다.
  • 대량의 요청을 효율적으로 처리할 수 있습니다.

4. Layered System (계층 구조)

  • Client는 REST API Server만 호출합니다.
  • REST Server는 다중 계층으로 구성될 수 있습니다.
    • 보안, 로드 밸런싱, 암호화 등을 위한 계층을 추가하여 구조를 변경할 수 있습니다.
    • Proxy, Gateway와 같은 네트워크 기반의 중간매체를 사용할 수 있습니다.
    • 하지만 Client는 Server와 직접 통신하는지, 중간 서버와 통신하는지는 알 수 없습니다.

5. Uniform Interface (인터페이스 일관성)

  • URI로 지정한 Resource에 대한 요청을 통일되고, 한정적으로 수행하는 아키텍처 스타일을 의미합니다.
  • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하며, Loosely Coupling(느슨한 결함) 형태를 갖습니다. 
    • 즉, 특정 언어나 기술에 종속되지 않음

6. Self-Descriptiveness (자체 표현)

  • 요청 메시지만 보고도 쉽게 이해할 수 있는 자체 표현 구조로 되어있습니다.

출처: https://dev-coco.tistory.com/97 [슬기로운 개발생활:티스토리]