RESTful API란?
- REST(Representational State Transfer) 아키텍처 스타일을 따르는 API(Application Programming Interface)를 말합니다.
- REST는 클라이언트와 서버 간의 통신을 설계하는 방식으로, 웹의 장점을 최대한 활용하도록 설계되었습니다.
- RESTful API는 주로 HTTP 프로토콜을 기반으로 동작하며, 간단하고 직관적인 방식으로 데이터를 전송 또는 조작할 수 있도록 설계됩니다.
✔️ REST의 주요 개념
: REST는 자원(Resource), HTTP 메서드(Method), URI를 사용해 시스템을 설계합니다.
1. 자원(Resource)
- REST는 데이터를 자원으로 정의합니다.
- 각 자원은 고유한 URI(Uniform Resource Identifier)로 식별됩니다.
예: https://api.example.com/users/123
users: 자원의 집합
123: 특정 자원의 식별자
2. HTTP 메서드(Method)
- RESTful API는 HTTP 메서드를 사용해 자원에 대한 작업을 정의합니다.
| HTTP 메서드 | 설명 | 예시 |
| GET | 자원의 조회 (Read) | GET /users/123 (사용자 정보 조회) |
| POST | 새로운 자원의 생성 (Create) | POST /users (새 사용자 생성) |
| PUT | 기존 자원의 전체 수정 (Update) | PUT /users/123 (사용자 정보 전체 수정) |
| PATCH | 기존 자원의 부분 수정 (Partial Update) | PATCH /users/123 (사용자 일부 정보 수정) |
| DELETE | 자원의 삭제 (Delete) | DELETE /users/123 (사용자 삭제) |
3. URI 설계 원칙
- URI는 명사를 사용해 자원을 표현합니다.
계층 구조를 반영하여 설계합니다.
올바른 예: /users/123/orders/456
잘못된 예: /getUserOrders
✔️ RESTful API의 특징
1. 무상태성(Stateless)
- 클라이언트와 서버 간 통신은 무상태(stateless)입니다.
- 서버는 요청 간의 상태 정보를 저장하지 않으며, 모든 요청에는 필요한 모든 정보(인증 토큰, 요청 데이터 등)가 포함됩니다.
2. 자원 기반 설계(Resource-Oriented Design)
- API는 작업 중심이 아니라 자원 중심으로 설계됩니다.
- 자원은 고유 URI로 식별되고, HTTP 메서드를 통해 작업이 정의됩니다.
3. 표준화된 인터페이스(Uniform Interface)
- 요청의 구조와 응답 형식이 일관됩니다.
- 일반적으로 JSON 형식을 사용합니다.
4. 캐싱(Caching)
- 자원의 상태가 자주 변경되지 않는 경우, 클라이언트는 서버에서 받은 데이터를 캐싱할 수 있습니다.
5. 계층화(Layered System)
- 클라이언트와 서버 사이에 프록시, 로드 밸런서, 캐싱 서버를 추가하여 시스템을 계층화할 수 있습니다.
✔️ RESTful API의 장단점
◾장점
1. 단순함과 직관성
- HTTP 프로토콜을 사용하므로 학습 곡선이 낮습니다.
- URI와 HTTP 메서드만 이해하면 사용할 수 있습니다.
2. 유연성과 확장성
- 클라이언트와 서버가 독립적으로 동작합니다.
- 다양한 플랫폼과 프로그래밍 언어에서 쉽게 사용할 수 있습니다.
3. 웹 표준 준수
- REST는 HTTP 표준을 따르므로 웹 환경과의 통합이 쉽습니다.
◾ 단점
1. 무상태성으로 인한 추가 작업
- 각 요청에 필요한 모든 데이터를 포함해야 하므로, 네트워크 사용량이 증가할 수 있습니다.
2. 복잡한 자원 설계
- 대규모 API 설계 시 URI 구조와 자원의 관계를 명확히 정의하는 것이 어렵습니다.
3. 실시간 데이터 처리에 부적합
- REST는 주로 요청-응답 방식에 기반하므로, 실시간 업데이트가 필요한 경우 WebSocket등의 대안을 사용해야 합니다.
'취준 > CS 기술면접 준비' 카테고리의 다른 글
| 웹 표준(Web Standards)이란? (1) | 2025.01.05 |
|---|---|
| SEO(Search Engine Optimization, 검색 엔진 최적화)란? (2) | 2025.01.05 |
| HTTP와 HTTPS의 차이 (1) | 2025.01.05 |
| 프로토콜(Protocol)이란? (1) | 2025.01.05 |
| 동기 vs 비동기 비교 (1) | 2025.01.05 |
댓글