본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
(RESTful에서 넘어옴)
Representational State Transfer

HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 정보 전달 방식

  • Roy Fielding 박사학위 논문에서 제안
  • REST API: REST를 기반으로 만들어진 API
  • RESTful: REST API를 활용하여 개발되는 서비스
REST는 기존 공식 표준인 SOAP을 넘어서 사실상 표준이 됨
구분 SOAP RESTful
사용 프로토콜 HTTP HTTP
주안점 동작과 프로세싱에 집중 데이터 처리에 집중
표현 방식 주로 XML 주로 JSON
메시지 형식 요청과 응답이 모두 XML 로 된 SOAP 봉투(Envelope)다 자원의 표현을 JSON, XML, 일반 텍스트, HTML 등에서 고른다
설계 관점 서비스가 내놓는 연산을 호출하는 RPC 방식의 서비스 지향 URI 로 가리킨 자원을 HTTP 메서드로 다루는 자원 지향
신뢰성·트랜잭션·보안 WS-ReliableMessaging(WS-Reliability), WS-AtomicTransaction, WS-Security 같은 WS-* 표준이 기반구조를 정한다 별도 표준 없이 HTTP·TLS 와 응용 설계(재시도, 멱등성 등)에 맡긴다
서비스 기술 WSDL 로 인터페이스를 기술한다 표준 기술 언어가 없다(OpenAPI 같은 관행을 쓴다)
구현과 확장성 봉투·스키마·WS-* 를 다뤄야 해 무겁다 무상태·캐시 가능 제약 덕분에 가볍고 서버를 늘리기 쉽다

SOAP 은 XML 기반의 메시지 틀을 정할 뿐 신뢰성·보안·상관관계 같은 기능은 따로 정의하도록 비워 두었고, 그 기능을 WS-ReliableMessaging 같은 별도 표준이 SOAP 바인딩으로 채운다.[1][2] REST 는 이름 붙일 수 있는 모든 정보를 자원으로 보고, 무상태 통신과 캐시를 제약으로 두어 구성 요소 간 상호작용의 확장성을 얻는다.[3]

  • 그래서 "SOAP 이 REST 보다 구현이 쉽고 확장성이 좋다", "SOAP 은 자원 지향이고 REST 는 RPC 방식의 서비스 지향이다", "REST 에는 WS-Reliability·WS-Transaction 같은 기반구조 표준이 있고 SOAP 은 직접 구현해야 한다"는 모두 반대로 말한 것이다
  • 옳은 비교는 "SOAP 은 요청·응답을 모두 XML 로 주고받고, REST 는 JSON·XML·일반 텍스트 등을 쓴다"이다
구성 설명
자원

(Resource)

  • 모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재
  • 자원을 구별하는 ID는 '/groups/:group_id'와 같은 HTTP URI
  • Client는 URI를 이용해서 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청
행위

(Verb)

  • HTTP 프로토콜의 Method 사용
  • HTTP 프로토콜은 GET, POST, PUT, DELETE 와 같은 메서드 제공
표현

(Representation)

  • Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representation)을 회신
  • REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태로 표현
  • 일반적으로 JSON이나 XML 이용
  • Server-Client
  • Stateless(무상태)
  • Cacheable(캐시 처리 가능)
  • Layered System(계층화)
  • Code-On-Demand(실행 코드 제공)
    • 클라이언트의 기능을 일시적으로 확장하거나 커스트마이징 가능
    • Java Applet, JavaScript, Flash 등이 Code On Demand의 예시
    • 보안 취약점 발생
  • Uniform Interface(인터페이스 일관성)

CRUD 와 HTTP 메서드

편집 원본 편집

REST 에서는 URI 로 자원(명사)을 가리키고, 그 자원에 할 일(동사)은 HTTP 메서드로 나타낸다. HTTP 표준에 정의된 메서드는 GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE 이고, 부분 수정용 PATCH 는 별도 RFC(5789)로 정의되어 있다.[4]

작업 HTTP 메서드 예
생성(Create) POST POST /api/v1/user + 본문에 회원 정보
조회(Read) GET GET /api/v1/user/1
수정(Update) PUT(전체 교체), PATCH(일부 수정) PUT /api/v1/user/1 또는 PATCH /api/v1/user/1 + 바꿀 값
삭제(Delete) DELETE DELETE /api/v1/user/1
  • READ, UPDATE, SELECT, INSERT 는 HTTP 메서드가 아니다. READ /user/1 이나 UPDATE /user/1 처럼 CRUD 이름을 메서드 자리에 쓰면 RESTful 한 요청이 아니다
  • /getUser, /deleteUser 처럼 URI 에 동사를 넣는 것도 피한다. 동작은 메서드가 말한다
  1. ↑ 「SOAP Version 1.2 Part 1: Messaging Framework (Second Edition)」, W3C, 2007, https://www.w3.org/TR/soap12-part1/, 확인일: 2026-11-05.
  2. ↑ 「Web Services Reliable Messaging (WS-ReliableMessaging) Version 1.2」, OASIS, 2009, https://docs.oasis-open.org/ws-rx/wsrm/200702/wsrm-1.2-spec-os.html, 확인일: 2026-11-05.
  3. ↑ Roy T. Fielding, 「Architectural Styles and the Design of Network-based Software Architectures」 5장 Representational State Transfer, University of California, Irvine, 2000, https://ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm, 확인일: 2026-11-05.
  4. ↑ 「RFC 9110 HTTP Semantics」 9장 Methods, IETF, https://www.rfc-editor.org/rfc/rfc9110.html, 확인일: 2026-11-04.