REST
IT위키
더 많은 작업
(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) |
|
| 행위
(Verb) |
|
| 표현
(Representation) |
- Server-Client
- Stateless(무상태)
- Cacheable(캐시 처리 가능)
- Layered System(계층화)
- Code-On-Demand(실행 코드 제공)
- 클라이언트의 기능을 일시적으로 확장하거나 커스트마이징 가능
- Java Applet, JavaScript, Flash 등이 Code On Demand의 예시
- 보안 취약점 발생
- Uniform Interface(인터페이스 일관성)
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 에 동사를 넣는 것도 피한다. 동작은 메서드가 말한다
- ↑ 「SOAP Version 1.2 Part 1: Messaging Framework (Second Edition)」, W3C, 2007, https://www.w3.org/TR/soap12-part1/, 확인일: 2026-11-05.
- ↑ 「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.
- ↑ 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.
- ↑ 「RFC 9110 HTTP Semantics」 9장 Methods, IETF, https://www.rfc-editor.org/rfc/rfc9110.html, 확인일: 2026-11-04.