REST API란?

업데이트: 2026년 10월

REST API는 URL의 리소스, 무상태 요청, 표준 HTTP 메서드라는 REST 아키텍처 스타일을 따르는 API입니다. REST(Representational State Transfer, 표현 상태 전송)는 Roy Fielding의 2000년 박사 논문에서 정의되었으며, 프로토콜이나 표준이 아니라 스타일입니다. 함께 지키면 웹 전체가 이미 소비하고 캐시하고 확장하는 법을 아는 API가 만들어지는 제약 조건의 집합입니다.

핵심 요약

질문답변
모델URL의 리소스 · 표현(보통 JSON) · 표준 메서드
출처Fielding의 2000년 박사 논문 5장. 명세가 아니라 아키텍처 스타일
여섯 가지 제약 조건클라이언트-서버 · 무상태 · 캐시 가능 · 균일한 인터페이스 · 계층화 · 주문형 코드(선택)
동사GET · POST · PUT · PATCH · DELETE. 안전성과 멱등성 의미론 포함
솔직한 각주대부분의 프로덕션 “REST” API는 2단계 HTTP API이며, 그래도 괜찮음

순수 HTTP로 보는 전체 CRUD 주기

네 개의 요청에 담긴 스타일 전체입니다. 모든 프레임워크와 SDK가 결국 보내는 것이 바로 이것입니다:

POST /v1/posts                     →  201 Created            생성
{ "title": "Hello REST" }             Location: /v1/posts/8fk2

GET /v1/posts/8fk2                 →  200 OK                 읽기
                                      { "title": "Hello REST", … }

PUT /v1/posts/8fk2                 →  200 OK                 교체
{ "title": "Hello again" }            (PATCH는 필드만 갱신)

DELETE /v1/posts/8fk2              →  204 No Content         삭제
GET /v1/posts/8fk2                 →  404 Not Found          …그리고 사라짐

같은 주기를 REST 호출을 감싼 SDK로 수행한 것입니다:

// JavaScript / Node.js — Back4app JS SDK
// The REST semantics, wrapped: create, read, update, delete
const post = new Parse.Object('Post');
post.set('title', 'Hello REST');
await post.save();                            // POST   /classes/Post      → 201

const fetched = await new Parse.Query('Post')
  .get(post.id);                              // GET    /classes/Post/:id  → 200

fetched.set('title', 'Hello again');
await fetched.save();                         // PUT    /classes/Post/:id  → 200

await fetched.destroy();                      // DELETE /classes/Post/:id  → 200

REST의 여섯 가지 제약 조건

  1. 클라이언트-서버 – 인터페이스와 구현이 독립적으로 진화합니다. UI는 스토리지가 어떻게 동작하는지 결코 알지 못합니다.
  2. 무상태 – 모든 요청은 자기 완결적입니다. 서버는 호출 사이에 세션을 유지하지 않으며, 이것이 어떤 복제본이든 어떤 요청에든 응답할 수 있게 합니다.
  3. 캐시 가능 – 응답은 자신의 캐시 가능성을 스스로 선언합니다. 적절한 캐시 헤더를 가진 GET은 웹의 캐싱 인프라 전체(브라우저, CDN, 프록시)가 API를 위해 일하게 합니다.
  4. 균일한 인터페이스 – REST 그 자체인 제약 조건으로, 네 부분으로 이루어집니다. URI로 식별되는 리소스, 표현을 통한 조작(리소스가 되기를 바라는 JSON을 돌려보냄), 자기 서술적 메시지(메서드 + 헤더가 요청 처리에 필요한 모든 것을 말함), 그리고 애플리케이션 상태의 엔진으로서의 하이퍼미디어(응답이 다음 동작으로 링크함)입니다.
  5. 계층화된 시스템 – 클라이언트는 자신이 오리진 서버, 캐시, 게이트웨이 중 무엇과 대화하는지 알 수 없습니다. 중개자가 자유롭게 끼어듭니다.
  6. 주문형 코드 (선택) – 서버가 실행 가능한 코드를 클라이언트에 보낼 수 있습니다. 선택 사항으로 표시된 유일한 제약 조건이며, 대부분의 API가 무시하는 제약 조건입니다.

HTTP 메서드: 안전성, 멱등성, CRUD

거의 모든 상위 노출 페이지에 빠져 있는 표입니다. RFC 9110의 의미론을 압축했습니다:

메서드CRUD 역할안전한가?멱등한가?무조건 재시도?
GET읽기예예예
POST생성아니요아니요아니요. 중복될 수 있음
PUT교체아니요예예. 같은 결과
PATCH부분 갱신아니요보장되지 않음패치 설계에 따라 다름
DELETE삭제아니요예예. 여전히 삭제된 상태

안전하다는 것은 요청이 아무것도 바꾸지 않는다는 뜻이고, 멱등하다는 것은 반복해도 더 이상 바뀌지 않는다는 뜻입니다. 이는 잡학이 아니라 재시도 정책 그 자체입니다. PUT에서의 네트워크 타임아웃은 두려움 없이 재시도할 수 있지만, POST에서의 같은 타임아웃에는 멱등성 키나 중복 검사가 필요합니다. 전체 CRUD 매핑은 별도 항목에서 다룹니다.

상태 코드: 언제 무엇을 반환할까

상황반환
읽기 성공200 OK
리소스 생성됨201 Created + Location 헤더
삭제됨, 반환할 내용 없음204 No Content
잘못된 형식의 요청400 Bad Request
자격 증명 없음/유효하지 않음401 Unauthorized
인증되었지만 허용되지 않음403 Forbidden
해당 리소스 없음404 Not Found
속도 제한 초과429 Too Many Requests (자세히)
서버 오류500 Internal Server Error

401/403과 200/201/204의 구분은 API 장인 정신이 드러나는 지점입니다. 정확한 코드는 상태 줄만으로 클라이언트를 디버깅할 수 있게 합니다.

이 API는 정말 REST인가? 성숙도 사다리

상업적 설명 글이 빠뜨리는 솔직한 섹션입니다. Richardson 성숙도 모델은 HTTP API를 등급으로 나눕니다. 0단계(URL 하나, 동사 하나, 변장한 RPC), 1단계(URL의 리소스), 2단계(올바른 메서드와 상태 코드), 3단계(하이퍼미디어, HATEOAS)입니다.

REST API를 위한 Richardson 성숙도 모델순수 HTTP 터널링인 0단계에서 리소스, 그다음 HTTP 동사와 상태 코드를 거쳐 3단계 하이퍼미디어 컨트롤까지 네 단계이며, 대부분의 프로덕션 API는 2단계에 있습니다.

0단계 – 엔드포인트 하나, 모든 것을 POST (변장한 RPC)

1단계 – 리소스: /posts/8fk2

2단계 – 동사 + 상태 코드 ← 대부분의 프로덕션 API가 여기에

3단계 – 하이퍼미디어: 응답이 다음 동작으로 링크 (HATEOAS)

순수 HTTP 터널링인 0단계에서 리소스, 그다음 HTTP 동사와 상태 코드를 거쳐 3단계 하이퍼미디어 컨트롤까지 네 단계이며, 대부분의 프로덕션 API는 2단계에 있습니다.

Fielding 본인의 주장에 따르면 하이퍼미디어 없는 API는 REST가 아니며, 그는 정확히 그렇게 말하는 날 선 글을 썼습니다. 실제로는 찬사를 받는 거의 모든 “REST API”가 2단계 HTTP API입니다. 리소스, 동사, 상태 코드, JSON, 하이퍼미디어 없음. 이는 순수성보다 어휘의 문제로서 중요합니다. 사다리를 알면 채용 공고(2단계)와 박사 논문(3단계)에서 이 용어가 각각 무엇을 뜻하는지 알 수 있고, 맹목적인 HATEOAS 숭배와 현학적인 지적 양쪽을 피할 수 있습니다.

REST vs. SOAP vs. GraphQL vs. gRPC

CriterionRESTSOAPGraphQLgRPC
본질아키텍처 스타일프로토콜쿼리 언어 + 런타임RPC 프레임워크
전송HTTP 위의 JSONXML 봉투HTTP 위의 JSON(엔드포인트 하나)HTTP/2 위의 Protobuf
계약OpenAPI(관례)WSDL(필수)스키마(내장).proto(필수)
캐싱HTTP 네이티브. 최대 강점취약애플리케이션 수준애플리케이션 수준
최적 영역공개 리소스 CRUD엔터프라이즈/레거시의 격식클라이언트가 모양을 정하는 중첩 데이터내부 서비스 속도
약점고정된 모양의 오버/언더페칭장황함캐시와 속도 제한의 복잡성브라우저 마찰

GraphQL 비교는 별도 항목에서 다룹니다.

REST API를 쾌적하게 만드는 관례

제약 조건 너머에, 소비자가 말없이 점수를 매기는 관례가 있습니다. 복수형 명사 리소스(/getPost가 아니라 /posts), 중첩은 최대 한 단계(/posts/8fk2/comments까지만), 모든 컬렉션에 페이지네이션(깊이와 안정성을 위한 커서 기반, 상한 강제), 쿼리 파라미터로 하는 필터링과 정렬(엔드포인트 변형이 아니라), 명시적 정책이 있는 버전 관리(/v1/ 경로 또는 헤더 중 하나를 고르고 지원 중단 기간을 공표), 콘텐츠 협상 준수(Accept, Content-Type), 그리고 산문이 아니라 기계가 읽을 수 있는 코드를 담은 구조화된 JSON 오류입니다. 이 중 어느 것도 박사 논문에는 없지만, 개발자가 추천하는 API와 억지로 참고 쓰는 API의 차이는 전부 여기에 있습니다.

일반적인 사용 사례

  • 공개 및 파트너 API – REST의 보편성이 곧 기능입니다. 모든 언어, 도구, 개발자가 REST를 말합니다.
  • 모바일과 웹 앱 백엔드 – HTTP 위의 리소스 CRUD는 대부분의 앱 화면이 실제로 데이터를 소비하는 방식과 맞아떨어집니다.
  • 마이크로서비스 이음새 – HTTP 도구(게이트웨이, 추적, 캐싱)가 제값을 하는 내부 계약.
  • 웹훅 방식 연동 – 양쪽이 이미 이해하는 평범한 HTTP 호출로 시스템이 시스템에 알리는 방식.
  • 자동 생성 데이터 API – 데이터베이스를 REST 리소스로 노출하는 플랫폼. 스키마에서 동작하는 API까지 가장 빠른 경로입니다.

REST를 사용해야 할까? 결정 매트릭스

REST가 올바른 기본값인 경우…다른 것을 선택해야 하는 경우…
공개 API, 알 수 없는 소비자내부의 높은 처리량 메시 → gRPC
리소스 모양의 CRUD 도메인클라이언트가 중첩 응답의 모양을 정해야 함 → GraphQL
HTTP 캐싱이 읽기 부하를 감당할 수 있음실시간 양방향 푸시 → 웹소켓 / 라이브 쿼리
단순성과 폭넓은 도구가 중요함격식 있는 엔터프라이즈 계약 필요 → SOAP
화면이 리소스에 깔끔하게 대응됨화면 하나가 서비스 다섯 개를 집계 → 복합 엔드포인트 / BFF

한계와 트레이드오프

  • 고정된 표현은 다양한 클라이언트에 맞지 않습니다. 오버/언더페칭 쌍은 REST의 구조적 약점입니다. 희소 필드 집합과 확장 파라미터가 완화하고, GraphQL은 다시 설계합니다.
  • 필수 계약이 없습니다. OpenAPI 명세를 강제하는 것은 없으므로 많은 REST API가 구전으로 문서화됩니다. gRPC와 GraphQL이 구조적으로 강제하는 규율이 여기서는 선택 사항입니다.
  • 무상태는 컨텍스트를 반복합니다. 인증과 테넌트 컨텍스트가 모든 요청에 실립니다. 바이트로는 저렴하지만 세션 의미론을 토큰으로 밀어내고 일부 흐름(다단계 트랜잭션)을 어색하게 만듭니다.
  • 설계상 N+1의 유혹. URL당 리소스라는 사고방식은 항목마다 한 번씩 호출하는 클라이언트를 부릅니다. 좋은 API는 소비자가 루프를 즉석에서 만들기 전에 확장과 배칭 기능을 제공합니다.
  • “REST”라는 단어는 모호합니다. 대부분의 사람에게는 2단계 HTTP API이고 박사 논문에서는 하이퍼미디어 아키텍처입니다. 명세, 채용 공고, 리뷰어가 어느 쪽을 뜻하는지 읽고 나서 논쟁해야 합니다.

Back4app에서의 REST API

Back4app은 관리형 데이터베이스, 자동 생성되는 REST 및 GraphQL API, 인증, 파일 스토리지, Cloud Code 서버리스 함수를 결합한 오픈소스 Backend as a Service(BaaS) 플랫폼입니다. 여기서 REST API는 구축되는 것이 아니라 생성됩니다. 데이터 모델의 모든 클래스가 즉시 리소스가 됩니다. POST /classes/Post가 생성하고 GET /classes/Post/:id가 읽으며, 위 안내에서 본 메서드, 상태 코드, Location 의미론을 그대로 갖추고, 키, 사용자 토큰, 클래스 수준 권한이 경계를 지킵니다. 코드 탭은 같은 주기를 SDK로 보여 주는데, SDK는 정확히 이 HTTP 위의 얇은 관용적 래퍼입니다. 작업이 CRUD를 넘어서면 Cloud Code 함수가 파일 하나로 커스텀 엔드포인트를 추가합니다. 기본적으로 올바른 2단계 REST를, 클래스를 정의하는 시간 안에 스키마에서 URL까지 얻습니다.

자주 묻는 질문

REST API를 쉽게 설명하면 무엇입니까?

모두가 이미 아는 관례를 사용해 두 애플리케이션이 HTTP로 대화하는 방식입니다. 각 대상(사용자, 주문)은 URL에 존재하고, 표준 동사로 조작하며(GET은 읽기, POST는 생성, PUT 또는 PATCH는 갱신, DELETE는 삭제), 모든 요청은 서버가 응답하는 데 필요한 모든 것을 담아 독립적으로 성립합니다.

REST는 무엇의 약자입니까?

Representational State Transfer(표현 상태 전송)로, Roy Fielding의 2000년 박사 논문에서 나왔습니다. 이름이 메커니즘을 설명합니다. 서버는 리소스 상태의 표현(보통 JSON)을 클라이언트로 전송하고, 클라이언트는 그 표현을 통해 애플리케이션을 한 상태에서 다른 상태로 옮깁니다.

REST와 RESTful의 차이는 무엇입니까?

일상적인 용법에서는 차이가 없으며 두 용어는 서로 바꿔 쓸 수 있습니다. 엄밀히 말하면 REST는 아키텍처 스타일의 이름이고 RESTful은 이를 구현한 API를 가리키는 형용사입니다. "RESTful은 모든 규칙을 따르고 REST는 일부만 따른다"는 떠도는 주장은 Fielding의 저작에 근거가 없습니다.

REST의 여섯 가지 제약 조건은 무엇입니까?

클라이언트-서버 분리, 무상태, 캐시 가능성, 균일한 인터페이스, 계층화된 시스템, 그리고 선택 사항인 주문형 코드입니다. 균일한 인터페이스는 다시 네 가지 규칙으로 풀립니다. URI로 식별되는 리소스, 표현을 통한 조작, 자기 서술적 메시지, 그리고 애플리케이션 상태의 엔진으로서의 하이퍼미디어입니다.

PUT과 POST의 차이는 무엇입니까?

멱등성과 주소 지정입니다. POST는 컬렉션 아래에 생성합니다. 서버가 URL을 할당하고, 요청을 반복하면 중복이 생깁니다. PUT은 알려진 URL에 전체 표현을 씁니다. 반복해도 같은 상태가 되므로 재시도가 안전합니다. 이 구분이 중요한 이유는 스타일이 아니라 바로 이 안전성의 차이입니다.

REST API는 반드시 JSON을 사용해야 합니까?

아니요. REST는 형식에 구애받지 않습니다. 리소스는 JSON, XML, HTML, 이미지로 표현될 수 있으며 Accept와 Content-Type 헤더로 협상합니다. JSON은 모든 클라이언트가 저렴하게 파싱하기 때문에 현대의 기본값이 되었을 뿐입니다. 제약 조건은 표현에 관한 것이지 특정 표현에 관한 것이 아닙니다.

REST API에서 무상태란 무슨 뜻입니까?

서버가 요청 사이에 클라이언트에 대한 기억을 유지하지 않는다는 뜻입니다. 각 요청은 베어러 토큰 같은 자격 증명을 포함해 처리에 필요한 모든 것을 담습니다. 보상은 수평 확장입니다. 어떤 서버든 어떤 요청에든 응답할 수 있습니다. 비용은 호출마다 반복되는 몇 바이트의 컨텍스트입니다.

HATEOAS란 무엇입니까?

Hypermedia As The Engine Of Application State의 약자입니다. 응답에 다음에 가능한 동작으로의 링크가 포함되어, 클라이언트는 URL을 하드코딩하는 대신 사람이 웹을 탐색하듯 링크를 따라 API를 탐색합니다. 가장 적게 구현되는 제약 조건이며, 대부분의 프로덕션 "REST" API는 이를 건너뛰고 성숙도 모델의 2단계에서 잘 지냅니다.

관련 용어

비교 대상

참고 자료

백엔드를 구축할 준비가 되셨나요?

몇 분 안에 Back4app에서 프로젝트를 시작하세요. 데이터베이스, 인증, API, Cloud Code가 포함되어 있으며 신용카드는 필요 없습니다.

작성 및 검수: Back4app Engineering, Back4app Engineering · 게시일 2026-10-27