HTTP (HyperText Transfer Protocol)
웹에서 클라이언트(브라우저, 앱)와 서버가 데이터를 주고받는 프로토콜(통신 규약)
예)
GET /users → 데이터 조회
POST /users → 데이터 생성
메시지 형식(요청/응답 헤더, 바디), 상태 코드(200, 404, 500 등)를 정의한다.
HTTP만 사용한 API 예시 (비RESTful)
(통신 규약만 쓰고, 자원 개념을 안 지킨 경우)
GET /getUser?id=1
POST /createUser
POST /updateUser?id=1
POST /deleteUser?id=1
- 모든 동작을 POST로 처리
- URL은 단순히 동작 이름을 담는 방식
- HTTP는 쓰지만, REST 철학은 안 지킨 케이스
REST (Representational State Transfer)
아키텍처 스타일(설계 원칙)
웹 자원을 "URI(자원 식별자)"로 표현하고, HTTP 메서드(GET, POST, PUT, DELETE 등)를 활용해 자원을 조작하는 방식
예)
GET /articles → 글 목록 조회
POST /articles → 글 작성
PUT /articles/1 → 1번 글 수정
DELETE /articles/1 → 1번 글 삭제
REST의 구성 요소
1. 자원(Resource)
2. 행위 (HTTP Method) : 자원에 대한 행위 정의. GET, POST, PUT, DELETE
3. URI : 자원을 식별하는 고유 주소
REST 아키텍처의 원칙
1. 클라이언트-서버 구조 (Client-Server Architecture)
서버는 자원을 관리하고 클라이언트에게 제공하는 역할만 수행하고, 클라이언트는 사용자 인터페이스와 상호작용을 관리하는 역할을 수행한다. 역할을 구분함으로 서로간의 의존성을 줄인다.
2. 무상태성 (Stateless)
서버는 클라이언트의 요청 간에 어떠한 상태 정보도 저장하거나 유지하지 않아야 한다. 요청은 그 요청을 처리하는 데 필요한 모든 정보를 담고 있어야 한다.
예시) 세션 정보나 사용자 로그인 상태를 서버에 저장하지 않고, 토큰(JWT 등)을 통해 클라이언트가 요청시 정보를 전달한다.
각 API 서버는 클라이언트의 단순 처리하며, 이전 요청이 다음 요청의 처리에 연관되어서는 안 된다.
3. 캐싱 처리 가능 (Cacheable)
서버는 응답 메시지를 통해 클라이언트나 중간 장치가 해당 응답을 캐시할 수 있는지 여부와 캐시 유효기간을 명시ㅐ야 한다.
4. 계층화된 시스템 (Layered System)
클라이언트가 최종 서버와 직접 통신하는지, 아니면 중간 서버(프록시, 로드 밸런서, 게이트웨이 등)를 통해 통신하는지 알 수 없어야 한다.
5. 균일한 인터페이스 (Uniform Interface)
1) 자원의 식별: URI를 사용하여 자원을 명확히 식별해야 한다.
2) 메시지를 통한 자원 조작: 클라이언트가 자원의 표현을 받으면, 그 정보만으로 자원을 수정하거나 삭제할 수 있어야 한다.
3) 자기 기술적 메시지: 응답 메시지가 자기 자신을 스스로 설명할 수 있어야 한다. (HTTP 헤더, 미디어 타입 등을 통해 데이터가 무엇인지, 어떻게 처리해야 하는지 등)
6. 주문형 코드 (Code-On-Demand)
서버가 클라이언트에게 실행 가능한 코드를 전송하여 클라이언트 기능을 일시적으로 확장할 수 있다.
RESTful API 예시
(자원을 URI로 표현하고, HTTP 메서드로 의미를 구분)
GET /users/1 → id=1 사용자 조회
POST /users → 새로운 사용자 생성
PUT /users/1 → id=1 사용자 정보 전체 수정
PATCH /users/1 → id=1 사용자 정보 일부 수정
DELETE /users/1 → id=1 사용자 삭제
참고
https://dev-coco.tistory.com/97
REST란? REST API 와 RESTful API의 차이점
참고 REST(REpresentational State Transfer)란? REST의 정의 "REpresentational State Transfer" 의 약자로, 자원을 이름(자원의 표현)으로 구분해 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미합니다. 즉, 자원(
dev-coco.tistory.com
'네트워크' 카테고리의 다른 글
| HTTP / HTTPS (0) | 2025.09.09 |
|---|---|
| [HTTP] 상태 코드 (1) | 2025.09.08 |
| [HTTP] REST 오류 응답 상태 (0) | 2025.08.29 |