Hello

REST, RESTful, REST API

by 볼빵빵오춘기

REST

네트워크 리소스를 정의하고 처리하는 방법을 설명하는 일련의 원칙을 기반으로 하는 아키텍처 스타일이다. 

REST의 원칙은 HTTP를 잘 활용하기 위한 원칙이다.

 

REST 주요 원칙

자원 기반 (Resource-based)

  • 리소스(Resource)
    • REST에서 모든 것은 리소스이다.
    • 리소스는 URI(Uniform Resource Identifier)로 고유하게 식별된다. 
  • URI 설계
    • URI는 리소스를 식별하는 데 사용되며, 명확하고 직관적으로 설계된다.
    • URI에는 동사를 사용하지 않으며, 대신 명사형을 사용한다.
      ex)
      /students : 모든 학생 목록
      /students/1 : ID가 1인 특정 학생의 정보
      /courses : 모든 강좌 목록
      /courses/front : 프론트엔드 강좌 정보

 

표현(Representation)

  • 리소스는 여러 형식으로 표현될 수 있습니다. 일반적으로 JSON, XML, HTML 등으로 표현된다.
  • 클라이언트는 서버에 요청 시 원하는 리소스의 표현 형식을 지정할 수 있다.
{
  "id": 1,
  "title": "front",
  "body": "..."
}

 

무상태성(Statelessness)

  • 각 요청은 독립적이며, 서버는 이전 요청의 상태를 저장하지 않는다.
  • 요청 간의 세션 상태를 저장하지 않기 때문에, 각 요청에는 필요한 모든 정보(인증 정보 등)가 포함되어야 한다.
    ex) 요청 헤더에 인증 토큰 포함: Authorization: Bearer <token>

 

HTTP 메서드 활용

  • REST는 HTTP 프로토콜을 적극적으로 활용한다.
  • HTTP 메서드(get, post, put, patch, delete)를 사용하여 CRUD(Create, Read, Update, Delete) 작업을 수행한다.
    ex)
    GET /students: 모든 학생 목록 조회
    POST /students: 새로운 학생 생성
    PUT /students/1: ID가 1인 학생 정보 전체 업데이트
    PATCH /students/1: ID가 1인 학생 정보 부분 업데이트
    DELETE /students/1: ID가 1인 학생 삭제

 

계층화 시스템(Layered System)

클라이언트는 중간 서버(프록시, 게이트웨이 등)를 통해 리소스에 접근할 수 있다. (⇒ 로드 밸런싱, 캐싱, 보안 등을 향상)

 

캐시 가능(Cacheable)

  • HTTP 프로토콜의 캐싱 기능을 활용하여, 응답 데이터를 클라이언트 또는 중간 서버에 캐싱할 수 있다. (⇒ 성능을 향상시키고 서버 부하를 줄여줌)
  • 응답 헤더에 캐시 관련 정보를 포함하여, 클라이언트가 응답을 캐시할 수 있도록 한다.
    ex) Cache-Control: max-age=3600 (1시간 동안 캐시)

 

HATEOAS (Hypermedia As The Engine Of Application State)

클라이언트는 리소스와 상호작용하는 데 필요한 정보를 하이퍼미디어 형식으로 제공한다.

 

RESTful

REST의 원칙을 준수 했을 때, 준수해서 만들어진 시스템을 RESTful하다 라고 한다. 

즉, RESTful = REST의 원칙을 준수했다!

 

RESTful 장점

일관성

  • 자원 기반 설계
    모든 리소스가 URI를 통해 일관되게 식별되기 때문에, API의 사용이 직관적이고 예측 가능하다.
    ex) /users, /users/1, /users/1/orders 등
  • HTTP 메서드의 명확한 의미
    GET, POST, PUT, PATCH, DELETE와 같은 HTTP 메서드는 각기 고유한 의미를 갖고 있어, 작동 방식을 쉽게 이해할 수 있다.

 

확장성

  • 무상태성 (Statelessness)
    서버는 각 요청을 독립적으로 처리하므로, 서버를 쉽게 확장할 수 있다.
    상태 정보를 유지하지 않기 때문에, 어떤 서버에서 요청을 처리하더라도 문제가 없다.
    ex) 클라이언트가 인증 정보를 매 요청마다 포함하므로, 요청을 여러 서버로 분산해도 동일하게 처리된다.
  • 캐시 가능 (Cacheable)
    응답을 캐시할 수 있는 기능을 활용하여, 서버 부하를 줄이고 성능을 향상시킬 수 있다. 
    ex) 정적 리소스나 자주 변경되지 않는 데이터를 캐시하여, 반복되는 요청에 대해 빠르게 응답할 수 있다.
  • 계층화 시스템 (Layered System)
    클라이언트와 서버 사이에 추가적인 계층(프록시, 로드 밸런서 등)을 두어 시스템의 확장성과 보안을 향상시킬 수 있다.
    ex) 로드 밸런서를 사용하여 여러 서버에 요청을 분산시키거나, 프록시 서버를 사용하여 보안을 강화할 수 있다.

 

명확한 상호작용

  • 자체 설명 메시지 (Self-descriptive Messages)
    요청과 응답 메시지는 필요한 모든 정보를 포함하고 있어, 클라이언트가 서버의 동작 방식을 이해하기 쉽다.
    ex) 요청 헤더에 Content-Type, Authorization 등을 명시하여, 요청의 목적과 필요한 권한을 명확히 알 수 있다.
  • HATEOAS (Hypermedia As The Engine Of Application State)
    응답에 다음 가능한 액션에 대한 링크를 포함하여, 클라이언트가 가능한 액션을 쉽게 이해하고 수행할 수 있다.
    ex) 사용자 정보 응답에 포함된 "self", "orders" 링크를 통해, 클라이언트는 사용자의 주문 정보를 조회할 수 있는 URL을 알 수 있다.

 

REST API (RESTful API)

REST API는 REST 아키텍처 스타일을 준수하여 설계된 API(응용 프로그램 인터페이스)입니다. REST API는 RESTful 웹 서비스를 구현하는 데 사용되며, 클라이언트와 서버 간의 상호작용을 정의한다.

 

REST API의 주요 요소

  • 엔드포인트(Endpoint)
    REST API는 URI 엔드포인트를 통해 접근할 수 있다.
  • HTTP 메서드
    API는 HTTP 메서드를 사용하여 요청을 처리한다.
  • 요청 및 응답(Request and Response)
    클라이언트는 서버에 요청을 보내고, 서버는 요청에 대한 응답을 보낸다.
    응답은 일반적으로 JSON 형식으로 제공한다.

 

정리

  • REST: 웹 서비스의 설계 원칙 및 아키텍처 스타일이다.
  • RESTful : REST 원칙을 따르는 웹 서비스이다.
    • RESTful 서비스는 자원을 URI로 일관되게 식별하고, HTTP 메서드를 활용해 명확한 의미를 부여하며, 무상태성을 유지하여 서버 확장을 용이하게 한다.
    • 또한, 캐시를 통한 성능 향상, 계층화된 시스템 구조, 자체 설명 메시지, 그리고 HATEOAS를 통해 클라이언트와 서버 간의 상호작용을 명확하고 직관적으로 만들어준다.
    • 위의 특징들은 RESTful 서비스가 일관되고 확장 가능하며 명확한 상호작용을 제공하는 이유이다.
  • REST API: RESTful 웹 서비스를 구현하는 API이다.

참고링크

https://www.youtube.com/watch?v=NODVCBmyaXs&t=281s

https://ko.wikipedia.org/wiki/REST

https://www.youtube.com/watch?v=fB3MB8TXNXM

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기