CS
HTTP 메서드 활용
k-oyun
2025. 4. 3. 22:25
클라이언트에서 서버로 데이터 전송
쿼리 파라미터를 통한 데이터 전송
- GET
- 주로 정렬 필터(검색어)
메시지 바디를 통한 데이터 전송
- POST, PUT, PATCH
- 회원가입, 상품 주문, 리소스 등록, 리소스 변경
4가지 상황
- 정적 데이터 조회
- 이미지, 정적 텍스트 문서
- 동적 데이터 조회
- 검색, 게시판 목록에서 정렬 필터
- HTML FORM을 통한 데이터 전송
- 회원가입, 상품 주문, 데이터 변경
- HTTP API를 통한 데이터 전송
- 회원가입, 상품 주문, 데이터 변경
- 서버 to 서버, 앱 클라이언트, 웹 클라이언트(AJAX)
정적 데이터 조회
쿼리 파라미터 미사용
- 이미지, 정적 테스트 문서
- GET 사용
- 정적 데이터는 일반적으로 쿼리 없이 리소스 경로로 단순하게 조회 가능
동적 데이터 조회
쿼리 파라미터 사용
- 주로 검색, 게시판 목록에서 정렬 필터에 사용
- 조회 조건을 줄여주는 필터(검색어), 조회 결과를 정렬하는 정렬 조건에 사용
- GET 사용
- GET은 쿼리를 사용해서 데이터 전달
HTML FORM 데이터 전송
POST 전송 - 저장
GET 전송 - 저장
GET 메서드를 통해 리소스를 저장하면 에러가 발생한다.
GET은 조회에만 사용한다.
GET 전송 - 조회
html form을 이용해서 데이터 조회도 가능하다.
method를 get으로 바꿔주면 된다.
multipart/form-data
multipart/form-data는 HTML FORM을 이용하여 여러 유형의 데이터를 전송할 시 사용한다.
예 ) 마이 페이지에서 이름, 나이, 사진을 등록
데이터를 각각 분리하여 전송한다.
정리
- HTML Form으로 데이터 전송 시 POST 전송
- HTML Form으로 GET 전송 가능 (쿼리 형식 사용)
- Content-Type: application/x-www-form-urlencoded 사용
- form의 내용을 메시지 바디를 통해서 전송 (key=value : 쿼리 형식)
- 전송 데이터를 url encoding 처리한다.
- 예) hello 오윤 => hello%EA%B9%80
- Content-Type: multipart/form-data
- 파일 같은 바이너리 데이터 전송 시 사용
- 다른 종류의 여러 파일과 폼의 내용을 함께 전송 가능
- HTML Form 전송은 GET, POST만 지원
HTTP API
- server to server
- 백엔드 통신
- App client
- 아이폰, 안드로이드
- Web client
- HTML Form 전송 대신 JavaScript를 통한 통신(AJAX)
- React, Vue.js 같은 Web Client와 API 통신
- POST, PUT, PATCH는 메시지 바디를 통해 데이터 전송
- GET : 쿼리 형식으로 데이터 전송
- Content-type: application/json을 주로 사용
- text, xml, json 등등
HTTP API 설계
- HTTP API - 컬렉션
- POST 기반 등록
- HTTP API - 스토어
- PUT 기반 등록
- HTML FORM 사용
- 웹 페이지 회원 관리
POST 기반 등록 (회원 관리 시스템) - 컬렉션
- 클라이언트는 등록될 리소스의 URI를 모른다.
- 회원 등록 /members
- POST /members
- 서버가 새로 등록된 리소스 URI를 생성한다.
- HTTP/1.1 201 Created
- Location: /members/100
- 컬렉션
- 서버가 관리하는 리소스 디렉터리
- 리소스의 URI를 생성하고 관리
- 여기서 컬렉션은 /members
PUT 기반 등록 (파일 관리 시스템) - 스토어
- 클라이언트가 리소스 URI를 알고 있어야 한다.
- 파일 등록 /files/{filename}
- PUT /files/logo.jpg
- 클라이언트가 직접 리소스의 URI를 지정한다.
- 스토어
- 클라이언트가 관리하는 리소스 저장소
- 클라이언트가 리소스의 URI를 알고 관리
- 여기서 스토어는 files
대부분 컬렉션(POST)을 사용한다.
HTML FORM 사용
- html form은 GET, POST만 지원한다.
- AJAX, Axios 같은 기술을 사용해서 해결할 수 있다.
그렇다면 신규 등록, 수정, 삭제는 어떻게 할까?
바로 컨트롤 URI다. (처음 봤다)
나만 처음 본 것인지는 모르겠지만 실무에서 많이 사용한다고 한다.
컨트롤 URI
- 회원 등록 /members/new
- 회원 수정 /members/{id}/edit
- 회원 삭제 /members/{id}/delete
html form은 GET, POST만 지원한다는 제약이 있다.
이런 제약을 해결하기 위해 동사로 된 리소스 경로를 사용하는 것이다.
/new, /edit, /delete가 바로 컨트롤 URI다.
이런 컨트롤 URI는 html form을 사용하는 경우가 뿐만 아니라 HTTP 메서드로 해결하기 애매한 경우 사용한다.
예) 배달 접수 -> 배달 중 -> 배달 완료 상태를 어떻게 등록해서 사용자에게 보여줄까?
/status/received -> /status/delivering -> /status/completed