이전 편에서는 각 HTTP 메서드의 특징과 상태코드에 대해 정리했다.
이번에는 실무에서 HTTP 메서드를 어떻게 활용하는지, 그리고 RESTful API를 어떻게 설계해야 하는지에 대해 정리해본다.
정적 리소스는 GET으로 단순 조회
- 정적 리소스(예: 이미지, 정적 HTML, JS)는 GET 메서드로 간단히 조회한다.
- URL에 파라미터 없이 리소스 경로만으로 접근하는 것이 기본이다.
예: /images/logo.png
GET + 쿼리파라미터: 검색, 필터, 정렬
- 검색 조건, 정렬 방식, 필터링 등은 쿼리 파라미터로 전달한다.
예: /posts?category=java&sort=recent - 다만, 리소스를 수정하는 요청에는 절대 GET을 사용하지 않아야 한다.
HTML Form과 HTTP 메서드 제한
- <form> 태그는 GET, POST만 지원한다.
- 때문에 PUT, PATCH, DELETE 요청은 자바스크립트 혹은 API 호출로 처리해야 한다.
- HTML 폼에서 method가 GET이면 요청 데이터는 쿼리 파라미터에 포함된다.
파일 전송: multipart/form-data
- 파일 업로드 시에는 POST 방식과 Content-Type: multipart/form-data를 사용한다.
- HTML 폼에서도 enctype 설정을 통해 쉽게 업로드 가능하다.
예: <form method="POST" enctype="multipart/form-data">
API 설계 시 컬렉션 vs 스토어
RESTful API를 설계할 때 리소스의 등록 방식에 따라 두 가지 스타일로 나뉜다.
1. POST 기반 컬렉션(Collection)
- 서버가 리소스 URI를 생성하고 관리
- 클라이언트는 /users에 POST 요청만 보내면 된다.
- 회원가입, 게시글 등록 등에 적합
- 예: POST /users
2. PUT 기반 스토어(Store)
- 클라이언트가 리소스 URI를 지정하고 관리
- 파일 업로드처럼 고유 경로를 클라이언트가 지정할 때 사용
- 예: PUT /files/image123.png
실무에서는 대부분 POST 방식의 컬렉션 스타일이 사용된다.
PUT 방식은 드물며, 주로 파일 업로드 API 등에서 제한적으로 활용된다.
컨트롤 URI란?
- HTML Form은 GET/POST만 지원 → 메서드 표현에 제한이 있다.
- 그래서 /users/delete 같은 동사 기반 URI를 사용하는 경우도 있다.
- 이런 경로를 컨트롤 URI라고 부르며, 실무에서 여전히 많이 쓰인다.
예: POST /orders/cancel
리소스 설계 개념 정리
HTTP 메서드를 기반으로 한 API 설계를 단순화하기 위해 4가지 유형으로 나눌 수 있다.
개념설명
문서(Document) | 하나의 리소스를 의미함. 예: /posts/1 |
컬렉션(Collection) | 서버가 관리하는 리소스 디렉토리. 예: /posts |
스토어(Store) | 클라이언트가 직접 관리하는 디렉토리. 예: /files/image1.png |
컨트롤러(Controller) | REST로 표현하기 어려운 동작. 예: /users/reset-password |
요약
- 정적 조회는 GET, 리소스 등록은 POST를 사용한다.
- HTML Form은 GET과 POST만 지원 → 제약 있음
- 파일 전송은 multipart/form-data로 처리
- API 설계는 컬렉션(POST) vs 스토어(PUT) 구분
- REST로 표현하기 어려운 행동은 컨트롤 URI로 보완한다.
'HTTP' 카테고리의 다른 글
[HTTP 완전 정복 시리즈] 8편 - HTTP 헤더1: 일반 헤더 (4) | 2025.07.23 |
---|---|
[HTTP 완전 정복 시리즈] 7편 - HTTP 상태코드 완벽 정리 (0) | 2025.07.22 |
[HTTP 완전 정복 시리즈] 5편 - HTTP 메서드와 상태코드 제대로 이해하기 (0) | 2025.07.22 |
[HTTP 완전 정복 시리즈] 4편 - HTTP의 동작 원리와 메시지 구조 (0) | 2025.07.21 |
[HTTP 완전 정복 시리즈] 3편 - 웹 브라우저 요청은 어떻게 흘러가는가? (0) | 2025.07.21 |