⚡ 네트워크 - REST API
⚡ 네트워크 - REST API
🔹 REST API란?
Representational State Transfer의 약자HTTP기반의 자원 중심 아키텍처 스타일을 따르는 API 설계 방식URI로 자원을 표현하고,HTTP메서드로 자원에 대한 행위를 정의함
🔹 REST의 구성 요소
| 구성 요소 | 설명 |
|---|---|
자원(Resource) | URI로 식별되는 대상 (예: /users/1) |
행위(Verb) | HTTP 메서드 (GET, POST, PUT, DELETE 등) |
표현(Representation) | 자원의 표현 방식 (예: JSON, XML 등) |
🔹 REST의 6가지 아키텍처 제약 조건
- 클라이언트-서버 구조: 클라이언트와 서버는 서로 분리되어 독립적으로 동작해야 함
- 무상태성(
Stateless): 요청 간 상태 정보를 서버가 저장하지 않음 - 캐시 처리 가능(
Cacheable): 응답은 명시적으로 캐싱이 가능해야 함 - 계층화 구조(
Layered System): 중간 서버(proxy,gateway등)를 통해 계층 구조를 이룰 수 있음 - 일관된 인터페이스(
Uniform Interface):URI,HTTP메서드,MIME타입 등으로 인터페이스를 일관되게 유지해야 함 - 코드 온 디맨드(
optional): 필요한 경우 클라이언트에 스크립트를 다운로드해서 실행 가능
🔹 RESTful한 URI 설계 원칙
| 기준 | 설명 | 예시 |
|---|---|---|
| 명사 사용 | 자원은 명사로 표현 | /users, /articles/1 |
| 계층 표현 | URI는 계층적으로 설계 | /users/1/posts/3 |
CRUD는 HTTP 메서드로 구분 | URI에 동사 사용 X | GET /users, POST /users |
| 복수형 사용 권장 | 컬렉션은 복수형 | /users, /products |
🔹 HTTP 메서드와 의미
| 메서드 | 설명 | 예시 |
|---|---|---|
GET | 자원 조회 | GET /users/1 |
POST | 자원 생성 | POST /users |
PUT | 자원 전체 수정 (대체) | PUT /users/1 |
PATCH | 자원 부분 수정 | PATCH /users/1 |
DELETE | 자원 삭제 | DELETE /users/1 |
🔹 주요 HTTP 상태 코드
| 코드 | 의미 | 설명 |
|---|---|---|
200 OK | 성공 | 요청이 정상적으로 처리됨 |
201 Created | 생성 성공 | POST 요청으로 자원이 생성됨 |
204 No Content | 삭제/수정 성공 | 응답 본문 없음 |
400 Bad Request | 잘못된 요청 | 필드 누락, 형식 오류 등 |
401 Unauthorized | 인증 실패 | 로그인 필요 |
403 Forbidden | 권한 없음 | 접근 권한 부족 |
404 Not Found | 자원 없음 | 존재하지 않는 URI |
500 Internal Server Error | 서버 오류 | 예기치 못한 오류 발생 |
🔹 REST API의 장점과 단점
▫️ 장점
HTTP표준 기반으로 범용성, 확장성 우수- 클라이언트와 서버의 역할 분리 용이
- 캐시와 계층화를 통한 성능 최적화 가능
- 다양한 플랫폼과 언어에서 접근 가능
▫️ 단점
- 명확한 표준이 없고 구현에 따라 해석이 달라질 수 있음
- 복잡한 관계 표현이나 트랜잭션 처리에 한계
- 버전 관리와
URI설계의 일관성 유지가 어려움
🔹 RESTful API 설계 시 주의점
URI에는 동사 대신 명사 사용- 메서드 의미에 맞게 사용 (
GET에 데이터를 생성하지 않음 등) PUT은 전체 업데이트,PATCH는 부분 업데이트- 에러 처리에 명확한 상태 코드와 메시지 제공
- 응답에 적절한
Content-Type헤더 설정 (예:application/json) - 버전 관리는
URI(/v1/users) 또는 헤더 방식으로 명시
🔹 REST vs RESTful
REST는 아키텍처 스타일 그 자체RESTful은REST원칙을 잘 따르고 있는 구현
🔹 정리
REST API는HTTP기반으로 자원을URI로 표현하고, 그 자원에 대한 행위를HTTP메서드(GET,POST,PUT,DELETE등)로 구분하는 아키텍처 스타일- 서버와 클라이언트를 분리하고, 무상태성을 유지하며, 일관된 인터페이스와 캐싱 같은 원칙을 따름
RESTful한 설계는 명확하고 확장성이 뛰어나 다양한 시스템 간 통신에 많이 쓰임
This post is licensed under CC BY 4.0 by the author.