본문 바로가기

CS

[CS] REST / RESTful API

REpresentational State Transfer

자원을 이름(자원의 표현)으로 구분해 해당 자원의 상태(정보)를 주고 받는 모든 것

즉, 자원(resource)의 표현(representation)에 의한 상태 전달을 뜻함

  • 자원 : 해당 소프트웨어가 관리하는 모든 것 ( 문서, 그림, 데이터, 해당 소프트웨어 자체 등 )
  • 표현 : 그 자원을 표현하기 위한 이름 ( DB의 학생 정보가 자원이면, 'students'를 자원의 표현으로 정함 )
  • 상태 전달 : 데이터가 요청되는 시점에 자원의 상태를 전달한다. ( JSON 혹은 XML을 통해 데이터를 주고 받는 것이 일반적 )

REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에,
웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일

REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나이다.

REST의 구성 요소

1. 자원(Resource) - URI

  • 모든 자원에는 고유한 ID가 존재하고, 이 자원은 Server에 존재합니다.
  • 자원을 구별하는 ID는 '/exgroups/:exgroup_id'와 같은 HTTP URI 입니다.
  • Client는 URI를 이용해 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청합니다.

2. 행위(Verb) - Method

  • HTTP 프로토콜의 Method를 사용합니다.
  • HTTP 프로토콜은 GET, POST, PUT, PATCH, DELETE의 Method를 제공합니다. ( CRUD )GET Read : 정보 요청, URI가 가진 정보를 검색하기 위해 서버에 요청한다. 
    GET Read : 정보 요청, URI가 가진 정보를 검색하기 위해 서버에 요청한다.
    POST Create : 정보 입력, 클라이언트에서 서버로 전달하려는 정보를 보낸다.
    PUT Update : 정보 업데이트, 주로 내용을 갱신하기 위해 사용한다. (데이터 전체를 바꿀 때)
    PATCH Update : 정보 업데이트, 주로 내용을 갱신하기 위해 사용한다. (데이터 일부만 바꿀 때)
    DELETE Delete : 정보 삭제, (안전성 문제로 대부분 서버에서 비활성화한다.)

3. 표현 ( Representation of Resource )

  • Client와 Server가 데이터를 주고받는 형태로 JSON, XML, TEXT, RSS 등이 있습니다.
  • JSON, XML을 통해 데이터를 주고 받는 것이 일반적입니다.

REST의 특징

유니폼 인터페이스 : HTTP 표준만 따르면 어떤 언어나 플랫폼에서 사용해도 사용이 가능한 인터페이스 스타일이다. 특정 언어에 상관없이 사용이 가능하다.

Stateless(상태 정보 유지 x) : Rest는 상태 정보를 유지하지 않는다. 서버는 각각의 요청을 완전히 다른 것으로 인식하고 처리를 한다.

Cacheable(캐시가능) : HTTP라는 기존 웹 표준을 그대로 사용하기 때문에 기존 인프라를 그대로 활용이 가능하다. 그래서 HTTP가 가진 캐싱 기능이 적용 가능

Self-descriptiveness (자체 표현 구조) : REST API 메시지만 보고도 쉽게 이해 할 수 있는 자체 표현 구조로 되어있다.

 

REST의 장단점

장점

  • HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출할 필요가 없다.
  • HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해준다.
  • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
  • Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
  • REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
  • 여러가지 서비스 디자인에서 생길 수 있는 문제를 최소화한다.
  • 서버와 클라이언트의 역할을 명확하게 분리한다.

단점

  • 표준이 존재하지 않는다.
  • HTTP Method 형태가 제한적이다.
  • 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 값이 왠지 더 어렵게 느껴진다.
  • 구형 브라우저가 아직 제대로 지원해주지 못하는 부분이 존재한다.

RESTful API

개념

  • RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어 ‘REST API’를 제공하는 웹 서비스를 ‘RESTful’하다고 할 수 있다.
  • RESTful은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것이 아니다. 즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭된다.

목적

  • 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
  • RESTful한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기이니, 성능이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없다.

특징

  • 사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 할 수 있다.

'CS' 카테고리의 다른 글

[CS] 소프트웨어 개발 방법론  (0) 2023.04.19
[CS] 보안 문제점  (0) 2023.04.19
[CS] 자주 사용하는 알고리즘과 자료구조  (0) 2023.04.18
[CS] HTTP / HTTPS  (0) 2023.04.17
[CS] 프로세스와 스레드  (0) 2023.04.14