Computer Science/테크톡 정리

[CS정리] RESTful 정리

미스터로즈 2021. 9. 8. 08:04

우아한 테크톡 관련된 유튜브 강의 정리 내용입니다.

정확한 내용을 학습하고 싶으면 강의 링크를 참고하시면 됩니다.

 


REST 란?

  • REpresentational : 표현
  • State : 상태
  • Transfer : 전달

자원의 표현 = HTTP URI

상태 전달 = HTTP Method

 

웹의 장점을 최대한 활용할 수 있는 아키텍처

 

RESTful?

아키텍처 스타일의 제약 조건을 모두 만족하는 시스템

 

 

REST 아키텍쳐의 제약 조건

  1. Client - Server (클라이언트 서버 구조)
  2. Stateless (무 상태성)
  3. Cache (캐시 처리 가능)
  4. Uniform Interface(유니폼 인터페이스)
    1. Identification of Resources
    2. Manipulation of Resources through Representation
    3. Self-Descriptive Messages
    4. Hypermedia As The Engine Of Application State
  5. Layered System (계층형 구조)
  6. Cade-On-Demand (옵션으로 사용)

 


Richardson Maturity Model

 

Level 0

 

HTTP를 RPC를기반으로 원격 통신을 위한 터널링 매커니즘으로 사용됨

 

POX(Plain Old XML)를 주고 받는 단순한 RPC 스타일 시스템 

 

※ RPC(Remote Procedure Call) 란?

별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게하는 프로세스간 통신 기술

 

Server - Client

  • Client가 Server에게 Request를 보내고, Server가 Client에게 Response를 보내는 구조
  • 서버는 API 제공과 제공된 API를 이용하여 비지니스 로직을 처리하거나 저장하는 역활
  • 클라이언트는 사용자 인증이나 컨텍스트 등을 관리하는 역활

 

Stateless

  • 클라이언트와 서버의 통신에는 상태가 없어야 합니다.
  • 모든 요청은 필요한 모든 정보를 담고 있어야 합니다.

 

Layered System

  • 계층으로 구성이 가능해야 합니다.
  • 클라이언트 입장에서는 서버만 호출합니다.
  • 서버는 다중 계층으로 구성될 수 있습니다.

 

Manipulation of Resources through Representation

  • Representation의 형태는 content-type으로 결정이 됩니다.
  • text/html, application/xml, application/json 등등....

Level1 - Resources

  • 리소스를 도입한다.
  • 모든 요청을 단일 서비스 엔드포인트로 보내는 것이 아니라 개별 리소스와 통신한다.

 

Identification of Resources

  • 자원은 유일하게 식별가능해야 한다
  • Resource가 하나 이상의 유일한 특정 주소인 URI로 식별되는지
  • 아직 POST Method로만 Request를 보내기 때문에 URI나 RequestBody로 어떤 동작을 할지 알려줘야 합니다.

Level2 - HTTP Methods

  • GET, PUT, DELETE 등 다른 메소드를 사용할 수 있습니다.
  • Level 0 , 1 보다 HTTP의 사용법에 가능한 가깝게 사용합니다.

 

Manipulation of Resources through Representation

  • HTTP Method로 표현을 담아야 합니다.
  • 안전한 오퍼레이션과 안전하지 않은 오퍼레이션 간의 강한 분리를 제공해야 합니다.

 

Self-Descriptive Messages

  • 메시지는 스스로를 설명해야 합니다.
  • 메시지는 요청 작업을 완료할 수 있도록 응답을 이해할 수 있도록 충분한 정보들을 HTTP Method, Status Code, Header 등을 활용하여 전달 해야합니다.

 

Cache

  • 일반적인 서비스에서 60~80% 가량의 트랜잭션이 Select와 같은 조회성 트랜잭션
  • Get은 얼마든지 호출해도 매번 같은 결과를 만들어내므로 캐싱이 가능하다.

Level3

  • HATEOAS(Hypermedia As The Engine Of Application State) 도입
  • 클라이언트가 전적으로 서버와 동적인 상호작용이 가능합니다.
  • 클라이언트가 서버로부터 어떠한 요청을 할 때, 요청에 필요한 URI를 응답에 포함시켜 반환하는 것입니다.

 

Hypermedia As The Engine Of Application State

  • 하이퍼링크를 통해서 애플리케이션의 상태가 전이되어야 합니다.
  • HTTP Response에 다음 Action이나 관계되는 리소스에 대한 HTTP Link를 함께 리턴
  • 요청 URI가 변경되더라도 클라이언트에서 동작으로 생성된 URI를 사용함으로써, 클라이언트가 URI 수정에 따른 코드를 변경하지 않아도 됩니다.

 

Cade-On-Demand

서버가 네트워크를 통해 클라이언트에 프로그램을 전달하면 그 프로그램이 클라이언트에서 실행될 수 있어야 합니다.