[HTTP] 데이터를 전송하는 방법과 URI 설계 개념 (컬렉션/스토어, 컨트롤 URI)

728x90

 

클라이언트에서 서버로 데이터 전송

 

1. `쿼리 파라미터`

- GET 요청에서 주로 사용

- 검색, 필터링, 정렬과 같은 조회용 데이터를 서버에 보낼 때 적합

- URL 길이 제한으로 대량의 데이터 전송하기 어려움

- 보안상 데이터 노출 위험

2. `메시지 바디`

- POST / PUT / PATCH / DELETE 요청에서 사용

- 리소스 생성, 수정, 삭제 등에 사용

- API 요청에서 JSON 형식을 사용하는 경우가 많음

- 대량의 데이터를 효율적으로 전송할 수 있으며, 보안성도 높음

 

상황별 데이터 전송 방식

1. `정적 데이터 조회` : 이미지, 정적 문서 단순 조회

    > `GET` (쿼리 파라미터 X)

GET /static/star.jpg HTTP/1.1

 

2. `동적 데이터 조회` : 검색, 필터링, 정렬 시 사용

    > `GET + 쿼리 파라미터`

GET /search?1=hello&hl=ko HTTP/1.1

 

3. `HTML Form 데이터 전송` : 회원 가입, 상품 주문, 데이터 변경

  : GET 전송

    > 입력 데이터가 쿼리 파라미터 형식으로 변환되어 URL 에 포함

    > `GET + 쿼리 파라미터`

GET /members?username=kim&age=20 HTTP/1.1

  : POST 전송

    > 메시지 바디에 데이터를 포함하여 전송

    > `application/x-www-form-urlencoded` 사용 (URL 인코딩)

POST /save HTTP/1.1
Content-Type: application/x-www-form-urlencoded

username=kim&age=20

  : 파일 전송

    > 바이너리 데이터 전송시 사용

    > 다른 종류의 여러 파일과 폼 내용을 함께 전송 가능

    > `multipart/form-data` 사용

POST /save HTTP/1.1
Content-Type: multipart/form-data; boundary=----XXX

----XXX
Content-Disposition: form-data; name="username"

kim
----XXX
Content-Disposition: form-data; name="age"

20
----XXX
Content-Disposition: form-data; name="file1"; filename="image.png"
Content-Type: image/png

 

4. HTTP API 를 통한 데이터  : 회원 가입, 상품 주문, 데이터 변경

    > 백엔드 서버 간 통신이나 웹/모바일 앱에서 서버로 데이터를 보낼 때 사용

    > GET : 쿼리 파리미터 사용

    > POST, PUT, PATCH, DELETE : 메시지 바디 사용하며, 주로 `application/json` 사용

POST /members HTTP/1.1
Content-Type: application/json

{
  "username": "young",
  "age": 20
}

 

> 참고 <

- HTML Form 전송은 GET, POST 만 지원 (PUT, PATCH, DELETE 는 AJAX, Fetch API 사용)

 

참고하면 좋은 URI 설계 개념

문서(Document)

- 단일 개념 (파일 하나, 객체 인스턴스, 데이터베이스 row)

- `GET /members/100` 라면 /members/100 이 단일 문서를 의미

 

컬렉션(Collection)

- 서버가 관리하는 리소스 디렉토리

- 서버가 리소스 URI 생성하고 관리

- 클라이언트는 `POST` 를 통해 리소스를 등록할 뿐, URI 를 직접 지정하지 않음

- `POST /members` 라면 /members 가 컬렉션을 의미 

 

스토어(Store)

- 클라이언트가 관리하는 리소스 저장소

- 클라이언트가 리소스의 URI 를 알고 직접 관리

- 클라이언트는 `PUT` 을 통해 특정 URI 에 리소스를 저장

- `PUT /files/star.jpg` 라면 /files 가 스토어를 의미

 

컨트롤 URI

- HTML FORM 에서 GET/POST 만 지원하므로 제약이 발생할 때

- 동사로 된 리소스 경로를 사용하여 해결

- HTTP 메서드로 해결하기 애매한 경우 사용 (HTTP API 포함)

- 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스를 실행

 

예시

회원 목록 : `GET /members`

회원 등록 폼 : `GET /members/new`

회원 등록 : `POST /members/new`

회원 조회 : `GET /members/{id}`

회원 수정 폼 : `GET /members/{id}/edit`

회원 수정 : `POST /members/{id}/edit`

회원 삭제 : `POST /members/{id}/delete`

> 여기서 `/new`, `/edit`, `/delete` 가 컨트롤 URI 이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 | HTTP 웹 기본 지식(김영한) - 인프런

728x90