REST(Representational State Transfer)는 웹 기반 시스템에서 자원(Resource)과 그 상태(State)를 효과적으로 전송하기 위한 아키텍처 스타일입니다. RESTful API는 이러한 REST 원칙을 기반으로 구축된 API로, 클라이언트와 서버 간의 효율적인 데이터 교환을 가능하게 합니다.
REST는 확장성과 유지보수성을 극대화하는 설계를 지향하며, 이를 활용하면 간결하고 직관적인 API 설계가 가능합니다. 이번 글에서는 REST의 개념과 주요 원칙, 그리고 RESTful API를 활용하는 방법에 대해 깊이 있게 살펴보겠습니다.
1. REST의 기본 원칙
REST는 간결하고 예측 가능한 API 구조를 제공하는 것을 목표로 합니다. 이를 위해 다음과 같은 핵심 원칙을 따릅니다.
✅ 1) 자원 기반 (Resource-Oriented Architecture)
REST에서는 모든 데이터 및 기능을 "자원(Resource)" 으로 취급하며, 각 자원은 고유한 URI(Uniform Resource Identifier) 를 가집니다.
✔ 예시:
- 사용자 정보를 조회하는 경우 →
/users/{userId}
- 특정 게시글을 조회하는 경우 →
/posts/{postId}
이러한 접근 방식은 API 설계를 단순하고 직관적으로 만들며, 사용자가 요청하는 자원을 쉽게 식별할 수 있도록 합니다.
✅ 2) 상태 비저장성 (Statelessness)
REST는 상태 비저장성(Stateless)을 원칙으로 하며, 서버는 클라이언트의 이전 요청 상태를 저장하지 않습니다.
즉, 각 요청(Request)은 독립적이며, 필요한 모든 정보는 요청 내에 포함되어야 합니다.
✔ 장점:
- 확장성이 뛰어나며, 여러 서버에서 요청을 분산 처리하기 용이
- 서버의 부하가 줄어들어 성능 최적화 가능
✔ 예시:
GET /users/123 HTTP/1.1
Host: api.example.com
Authorization: Bearer
위 요청은 사용자 ID가 123인 사용자의 정보를 조회하는 예제입니다. 서버는 클라이언트의 세션을 기억하지 않으며, 요청마다 인증 토큰을 함께 보내야 합니다.
✅ 3) 다양한 표현 방식 (Representation of Resources)
RESTful API는 자원의 상태를 다양한 형식으로 표현할 수 있습니다.
✔ 일반적으로 사용되는 데이터 형식:
- JSON (JavaScript Object Notation) → 가장 많이 사용됨
- XML (Extensible Markup Language)
- YAML, CSV 등 기타 포맷
✔ 예시 – JSON 응답:
{
"id": 1,
"name": "김철수",
"email": "kim@example.com"
}
REST API는 기본적으로 JSON 기반의 데이터 교환을 선호하며, 이는 가독성과 전송 효율성이 뛰어나기 때문입니다.
✅ 4) HTTP 메서드를 활용한 CRUD 연산
RESTful API는 HTTP의 메서드를 활용하여 CRUD(Create, Read, Update, Delete) 작업을 수행합니다.
HTTP 메서드 | 동작 | 설명 | 예제 |
---|---|---|---|
GET | 조회(Read) | 특정 자원을 조회 | GET /users/1 |
POST | 생성(Create) | 새로운 자원 생성 | POST /users |
PUT | 수정(Update) | 기존 자원 수정 | PUT /users/1 |
DELETE | 삭제(Delete) | 특정 자원 삭제 | DELETE /users/1 |
✔ 예제 – 특정 제품의 정보를 수정하는 PUT 요청
PUT /products/10 HTTP/1.1
Host: api.example.com
Content-Type: application/json
{
"name": "무선 이어폰",
"price": 89000
}
위 요청은 ID가 10인 제품의 정보를 수정하는 예제입니다.
2. RESTful API 활용 사례
✅ 1) 제품 목록 조회 (GET 요청)
- URL:
GET /products
- 설명: 모든 제품 정보를 가져옴
- 응답 예시:
[ {"id": 1, "name": "스마트폰", "price": 1000000}, {"id": 2, "name": "태블릿", "price": 500000} ]
✅ 2) 새로운 제품 추가 (POST 요청)
- URL:
POST /products
- 설명: 새로운 제품 추가
- 요청 본문:
{ "name": "스마트 워치", "price": 250000 }
- 응답 예시:
{ "id": 3, "name": "스마트 워치", "price": 250000 }
✅ 3) 특정 제품 수정 (PUT 요청)
- URL:
PUT /products/1
- 설명: ID가 1인 제품의 가격 변경
- 요청 본문:
{ "name": "스마트폰", "price": 950000 }
✅ 4) 특정 제품 삭제 (DELETE 요청)
- URL:
DELETE /products/2
- 설명: ID가 2인 제품 삭제
3. RESTful API의 확장 개념 – HATEOAS
HATEOAS(Hypermedia as the Engine of Application State)는 클라이언트가 API의 현재 상태를 기반으로 탐색할 수 있도록 하는 원칙입니다.
즉, API 응답에 관련된 링크를 포함하여 사용자가 추가적인 작업을 쉽게 수행할 수 있도록 지원합니다.
✔ HATEOAS 적용 예시 – 제품 정보 응답:
{
"id": 1,
"name": "스마트폰",
"price": 1000000,
"links": [
{"rel": "self", "href": "http://api.example.com/products/1"},
{"rel": "update", "href": "http://api.example.com/products/1"},
{"rel": "delete", "href": "http://api.example.com/products/1"}
]
}
위와 같은 응답을 사용하면, 클라이언트는 추가적인 API 문서를 보지 않고도 어떤 작업을 수행할 수 있는지 즉시 알 수 있습니다.
4. RESTful API의 장점
✔ 1) 표준화된 설계
- RESTful API는 일관된 URI 구조와 HTTP 메서드 활용을 통해 직관적인 API 설계가 가능
✔ 2) 확장성(Scalability) 높음
- 상태 비저장성 원칙 덕분에 로드 밸런싱 및 분산 시스템 설계가 용이
✔ 3) 유지보수 용이
- 클라이언트와 서버 간의 의존성이 적어 API 확장이 용이
✔ 4) 높은 호환성
- JSON, XML, HTML 등 다양한 형식을 지원하여 다양한 플랫폼과의 연동 가능
결론
RESTful API는 현대 웹 및 모바일 애플리케이션에서 필수적인 기술로 자리 잡고 있습니다. 간결한 URI 설계, 상태 비저장성, 다양한 HTTP 메서드 활용, 그리고 HATEOAS 확장성을 통해 더 효율적이고 직관적인 API 설계가 가능합니다.
🚀 RESTful API를 활용하면, 개발자는 유지보수가 쉬운 API를 설계할 수 있으며, 사용자에게는 더 나은 서비스 경험을 제공할 수 있습니다.
'네트워크 > HTTP' 카테고리의 다른 글
RESTful API와 HTTP: HATEOAS (Hypermedia as the Engine of Application State) (0) | 2025.03.07 |
---|---|
RESTful API와 HTTP: RESTful API 설계 원칙 (0) | 2025.03.07 |
HTTP/3: 성능 개선 사항과 최적화 (0) | 2025.03.07 |
HTTP/3: QUIC 프로토콜을 통한 차세대 웹 통신 혁신 (0) | 2025.03.07 |
HTTP/3: 차세대 웹 프로토콜의 혁신 (0) | 2025.03.07 |