https://surrealcode.tistory.com/114
HTTP 메서드들을 활용하기 전에 이전 포스팅을 통해 HTTP 메서드를 알아보도록 하자.
- 클라이언트에서 서버로 데이터 전송
클라이언트에서 서버로 데이터를 어떻게 전송할까?
클라이언트에서 서버로 데이터를 전달하는 방식은 크게 2가지 이다.
1. 쿼리 파라미터를 통한 데이터 전송
- GET
- 주로 정렬 필터(검색어)
2. 메시지 바디를 통한 데이터 전송
- POST, PUT, PATCH
- 회원 가입, 상품 주문, 리소스 등록, 리소스 변경
클라이언트에서 서버로 데이터를 전송하는 4가지 상황을 알아보자.
1. 정적 데이터 조회
- 이미지, 정적 텍스트 문서
2. 동적 데이터 조회
- 주로 검색, 게시판 목록에서 정렬 필터(검색어)
3. HTML Form을 통한 데이터 전송
- 회원 가입, 상품 주문, 데이터 변경
4. HTTP API를 통한 데이터 전송
- 회원 가입, 상품 주문, 데이터 변경
- 서버 to 서버, 앱 클라이언트, 웹 클라이언트(Ajax)
1. 정적 데이터를 조회하는 방법은 다음과 같다.
클라이언트에서 서버로 jpg를 요청한다고 가정한다. 서버는 star.jpg를 클라이언트에게 내려주는것이 전부이다.
쿼리 파라미터를 사용하지 않는다.
정적 데이터는 일반적으로 쿼리 파라미터 없이 리소스 경로로 단순하게 조회가 가능하다.
2. 동적 데이터 조회를 조회는 다음과 같이 이루어진다.
https 구글에 search(경로)에추가적인 경로(추가 파라미터들을 입력한다)
쿼리 파라미터를 사용한다
아래의 쿼리 파라미터는 q는 hello 언어는 한국어 라는 예시로 동작하게 된다.
동적 데이터는 주로 검색, 게시판 목록에서 정렬 필터할때나 조회 조건을 줄여주는 필터에 주로 사용된다.
조회는 GET을 사용한다.
GET은 쿼리 파라미터를 사용해서 데이터를 전달한다.
3. HTML Form을 통해 데이터를 전송하는 방법도 있다.
HTML의 폼태그를 만들어서 /save라는 곳에 post로 보낸다.
HTML의 폼태그의 버튼을 누르게 되면 웹브라우저에서 HTTP 메시지가 생성되게 된다.
HTML 폼으로 전송할 때 메서드를 GET으로 바꾸어서 전송할 수 도 있다.
이렇게 되면 웹 브라우저에서 POST가 아닌 GET메서드로 생성되게 되는데 앞서 보았듯이 GET은 URL경로에 쿼리 파라미터를 사용해서 데이터를 전달하게 된다.
/save라는 URI는 사용하면 안된다.
주의 : GET은 조회에서만 사용해야 한다.
GET으로 조회를 하고 싶으면 다음과 같이 진행해야 한다.
HTML Form에서 multipart/form-data를 사용해서 파일 또한 전송할 수 있다
여러 컨텐트 타입을 보낼 수 있게 되어있다.
주로 바이너리 데이터들을 전송할 때 사용된다.
HTML Form 데이터 전송 정리
1. HTML Form submit 시 POSt 전송
ex) 회원 가입, 상품 주문, 데이터 변경
2. Content-Type : application/x-www-form-urlencoded 사용
2.1 form의 내용을 메시지 바디를 통해서 전송(key=value, 쿼리 파라미터 형식)
2.2 전송 데이터를 URL Encoding 처리
ex) abc김 -> abc%EA%B9%80
3. HTML Form은 GET 전송도 가능
4. Content-Type : multipart/form-data
4.1 파일 업로드 같은 바이너리 데이터 전송시 사용
4.2 다른 종류의 여러 파일과 폼의 내용을 함께 전송할 수 있다.(그래서 이름이 multipart)
참고 : HTML Form 전송은 GET, POST만 지원한다.
4. HTTP API 데이터 전송
HTTP API는 클라이언트쪽에서 서버에서 사용할 메시지의 상태를 다 만들어서 넘겨버린다.
HTTP API 데이터 정리
1. 서버 to 서버 에서 자주 사용된다. ex) 백엔드 시스템 통신
2. 앱 클라이언트에서 사용된다. ex) 아이폰, 안드로이드
3. 웹 클라이언트에서 사용된다.
- HTML에서 Form 전송 대신 자바 스크립트를 통한 통신에 사용(AJAX)
- 예) React, VueJs와 같은 웹 클라이언트와 API 통신
4. POST, PUT, PATCH : 메시지 바디를 통해 데이터를 전송한다.
5. GET : 조회, 쿼리 파라미터로 데이터를 전달한다.
6. Content-Type : application/json을 주로 사용한다.
- HTTP API 설계 예시
HTTP AIP의 설계 예시는 아래의 세개정도면 거의 전부 커버가 가능하다.
1. HTTP API - 컬렉션
2. HTTP API - 스토어
3. HTML FORM 사용
1. HTTP API - 컬렉션
- POST 기반 등록(회원 관리 API 제공)
회원 관리 시스템을 만든다고 가정해보자.
항상 리소스를 식별해야 한다.
POST - 신규 자원 등록 특징
클라이언트는 등록될 리소스의 URI를 모른다.
- 회원등록 /members -> POST
- POST /members
서버가 새로 등록된 리소스 URI를 생성해준다.
- HTTP/1.1 201 Created
Location: /members/100
컬렉션(Collection)
- 서버가 관리하는 리소스 디렉토리
- 서버가 리소스의 URI를 생성하고 관리한다.
- 여기서 컬렉션은 /member 이다.
2. HTTP API - 스토어
- PUT 기반 등록(정적 컨텐츠 관리, 원격 파일 관리)
클라이언트가 리소스 URI를 알고 있어야 한다. --> PUT이기 때문에
- 파일 등록 /files/{filename} -> PUT
- PUT /files/star.jpg
클라이언트가 직접 리소스의 URI를 지정한다.
스토어(Store)
- 클라이언트가 관리하는 리소스 저장소
- 클라이언트가 리소스의 URI를 알고 관리한다.
- 여기서 스토어는 /files
3. HTML FORM 사용(웹 페이지 회원 관리)
- GET, POST만 지원
HTML FORM은 GET, POST만 지원하기 때문에 위의 '회원 삭제' 기능처럼 컨트롤 URI를 사용해야 한다.(DELETE 와 같은 메서드를 사용할 수 없기 때문에)
- 제약을 해결하기 위해 동사로 된 리소스 경로를 사용한다.
- POST의 /new, /edit, /delete가 컨트롤 URI이다.
- HTTP 메서드로 해결하기 애매한 경우 사용한다.(HTTP API 포함)
'공부 > HTTP' 카테고리의 다른 글
HTTP 상태 코드 (0) | 2025.01.20 |
---|---|
HTTP 메서드 (0) | 2025.01.16 |
HTTP 기본 (1) | 2025.01.15 |
URI와 웹 브라우저 요청 흐름 (0) | 2025.01.14 |
인터넷 네트워크 (0) | 2025.01.14 |