REST란 무엇인가? REST API와 RESTful API의 개념과 사용

dradra·2024년 11월 3일

REST 개요

REST (REpresentational State Transfer)는 웹에서 컴퓨터 시스템 간의 통신을 표준화하는 아키텍처 스타일

REST는 주로 HTTP 프로토콜을 기반으로 하며, RESTful 시스템은 무상태(stateless)클라이언트-서버 구조를 유지하며 자원(Resource) 기반으로 통신한다. 현대의 많은 API가 REST 원칙을 따르고 있지만, 모든 REST API가 반드시 RESTful한 것은 아니라서 REST와 RESTful API의 차이점도 이해해야 한다.


REST의 주요 개념

1. 자원(Resource)

해당 소프트웨어가 관리하는 모든 것을 의미한다.

문서, 이미지, 데이터베이스의 테이블 내용 등 다양한 형태로 존재할 수 있다. 이 자원을 특정하기 위해 고유한 URI를 사용하며, 자원의 상태(정보)를 URI를 통해 서버와 주고받을 수 있다. 예를 들어, 학생 정보는 students라는 URI로 구분할 수 있다.

2. 표현(Representation)

자원을 표현하는 형태로 JSON, XML 등 다양한 포맷이 사용된다.

클라이언트는 서버에 데이터를 요청할 때 원하는 표현 형태를 지정할 수 있으며, 서버는 클라이언트가 이해할 수 있는 형식으로 데이터를 응답한다.

3. 상태 전달

데이터가 요청되는 시점에 자원의 상태가 JSON, XML 등을 통해 전달된다.

이로 인해 자원의 상태를 요청마다 최신 상태로 전달하게 된다.

4. 클라이언트-서버의 분리

REST 아키텍처에서는 클라이언트와 서버가 독립적으로 개발될 수 있도록 한다.

클라이언트는 사용자 인터페이스와 요청을 담당하고, 서버는 데이터 저장과 비즈니스 로직을 관리한다. 이로 인해 클라이언트와 서버는 서로의 내부 구조나 작동 방식을 몰라도, 메시지 형식만 알고 있으면 상호작용이 가능하다.

5. 무상태성 (Statelessness)

RESTful 시스템은 무상태 시스템을 따르며, 각 요청은 독립적으로 처리된다.

서버는 클라이언트의 상태를 저장하지 않기 때문에, 클라이언트는 매 요청마다 필요한 모든 정보를 포함하여 서버에 전달해야 한다. 세션과 같은 상태를 서버에 저장하지 않고, 클라이언트가 매번 인증 정보를 포함하여 요청을 보내는 방식을 떠올리면 된다.

REST의 구성 요소

REST의 핵심은 자원(Resource)행위(Verb)로, 각각의 개념이 HTTP 프로토콜과 일치한다.

1. 자원(Resource) - URI로 표현

  • 각 자원에는 고유한 URI가 있어 자원을 명확히 식별할 수 있다.
  • 예를 들어, 특정 그룹의 데이터를 나타내는 '/exgroups/:exgroup_id' URI는 자원을 지정하는 역할을 한다.

2. 행위(Verb) - HTTP 메서드로 표현

  • 자원에 대한 작업은 HTTP 메서드를 통해 수행된다. REST는 GET, POST, PUT, PATCH, DELETE 등의 HTTP 메서드를 통해 자원을 CRUD(생성, 조회, 수정, 삭제) 방식으로 관리한다.

    메서드용도설명
    GETRead자원의 상태를 조회한다.
    POSTCreate새로운 자원을 생성한다.
    PUTUpdate자원을 전체적으로 수정한다.
    PATCHUpdate자원의 일부를 수정한다.
    DELETEDelete자원을 삭제한다.

3. 표현 (Representation of Resource)

  • 서버와 클라이언트가 데이터를 주고받는 형식으로, JSON이나 XML 등이 일반적으로 사용된다.

REST API란?

REST의 원칙을 기반으로 자원의 상태와 CRUD 작업을 제공하는 API

REST API 설계 시 중요 사항

  1. URI는 자원을 표현해야 한다

    • URI는 정보를 제공하는 자원만을 표현해야 하며, 행위는 HTTP 메서드로 전달되어야 한다. 예를 들어, /getAllUsers 같은 URI 대신 /users라는 URI와 함께 GET 메서드를 사용하여 전체 사용자 목록을 조회하도록 설계한다.
  2. URI 설계 규칙

    • URI는 명사로 표현하고, 동사는 사용하지 않는다. 계층 구조는 슬래시(/)로 나타내며, 밑줄(_) 대신 하이픈(-)을 사용하고 소문자로 구성한다.
    • https://school.com/grade/2/students URI는 특정 학년(grade)의 학생 목록을 조회하는데, 이를 통해 각 URI가 어떤 데이터를 의미하는지 명확히 이해할 수 있다.

REST API와 RESTful API의 차이

RESTful API는 REST의 원칙을 철저히 따르는 API를 뜻하며, 모든 URI와 메서드의 일관성이 보장된다.
반면, REST API는 REST 아키텍처의 일부 원칙만 따르더라도 해당 범주에 포함될 수 있다.
RESTful API는 자원의 URI, 상태 전달 방식, 무상태성 유지 등을 더 엄격히 적용하여 설계된 API라 할 수 있다.

기준RESTRESTful
정의웹 서비스 구조를 설계하는 아키텍처 원칙의 집합REST 원칙을 철저하게 구현한 API
목적자원 및 상호작용을 조직화하기 위한 철학적 개념REST 원칙에 따라 일관되고 예측 가능한 방식으로 API를 설계
HTTP 메서드 사용권장되지만 엄격하지 않을 수 있음CRUD 작업을 위해 HTTP 메서드를 엄격하게 사용
자원 명명 방식혼합된 명명 규칙을 가질 수 있음명사 기반의 명확한 자원 URI 사용
무상태성일반적으로 따르지만 일부 예외가 있을 수 있음각 요청이 독립적이고 무상태성 보장
캐싱권장되지만 필수는 아님성능 최적화를 위해 캐싱 권장
준수 수준REST 원칙의 일반적인 준수REST 원칙을 철저히 준수

RESTful API의 한계

무상태성은 RESTful API의 확장성과 성능을 높이지만, 세션 관리나 인증 처리에 복잡성을 가져올 수 있다. 이를 해결하기 위해 JWT나 OAuth와 같은 인증 방식을 자주 사용한다. 이 방식들은 요청마다 인증 토큰을 포함시켜 무상태성을 유지하면서도 안전하게 사용자 인증을 처리할 수 있다.

또한, 대규모 데이터를 한 번에 전송하거나 실시간 통신이 필요한 경우에는 RESTful 구조가 다소 비효율적일 수 있어, WebSocket이나 GraphQL 같은 대안이 필요할 수도 있다.

참고 문서 및 블로그

0개의 댓글