[HTTP] 5. HTTP 메서드 활용

임정규·2025년 10월 3일

Infra

목록 보기
7/10
post-thumbnail

HTTP API를 설계하기 위해서는 데이터를 전송하는 방식전송하는 상황에 대한 이해가 필요하다.

1. 클라이언트 > 서버 데이터 전송

전송하는 방식

  1. 쿼리 파라미터를 통한 데이터 전송
    • GET
    • 정렬 필터 (검색어)
  2. 메시지 바디를 통한 데이터 전송
    • POST, PUT, PATCH
    • 회원 가입, 상품 주문, 리소스 등록, 리소스 변경

전송하는 상황

  1. 정적 데이터 조회

    • 이미지, 정적 텍스트 문서
    • 조회는 GET 사용
    • 정적 데이터는 일반적으로 쿼리 파라미터 없이 리소스 경로로 단순하게 조회 가능
  2. 동적 데이터 조회

    • 주로 검색, 게시판 목록에서 정렬 필터 (검색어)
    • 조회 조건을 줄여주는 필터, 조회 결과를 정렬하는 정렬 조건에 주로 사용
    • 조회는 GET 사용
    • GET은 쿼리 파라미터 사용해서 데이터를 전달
  3. HTML Form을 통한 데이터 전송

    • 회원 가입, 상품 주문, 데이터 변경

      1. HTML Form submit시 POST 전송
      Content-Type: application/x-www-form-urlencoded 사용
      form의 내용을 메시지 바디를 통해서 전송(key=value, 쿼리 파라미터 형식)
      전송 데이터를 url encoding 처리

      2. HTML Form은 조회 목적일 경우 GET 전송도 가능

      3. HTML Form은 여러 형태의 데이터를 한꺼번에 전송 가능 (POST)
      Content-Type: multipart/form-data
      파일 업로드와 같은 바이너리 데이터 전송시 사용
      다른 종류의 여러 파일과 폼의 내용 함께 전송 가능(그래서 이름이 multipart)

      4. 참고
      HTML Form 전송은 GET, POST만 지원

  4. HTTP API를 통한 데이터 전송

    • 회원 가입, 상품 주문, 데이터 변경
    • 서버 to 서버 (백엔드 시스템 통신)
    • 앱 클라이언트 (아이폰, 안드로이드)
    • 웹 클라이언트
      HTML에서 Form 전송 대신 자바 스크립트를 통한 통신에 사용(AJAX)
      React, Vue.js 같은 웹 클라이언트와 API 통신
    • Content-Type: application/json

2. HTTP API 설계 예시

API 설계를 할 때, 단순 조회도 중요하지만, 데이터를 변경하는 상황인 데이터 등록, 그리고 HTML Form을 활용하여 데이터를 다루는 상황을 중점으로 정리해보자.
회원 관리 시스템을 예시로 정리해보겠다.

API 설계 - POST 기반 등록

기능URI메서드
회원 목록/membersGET
회원 등록/membersPOST
회원 조회/members/{id}GET
회원 수정/members/{id}PATCH, PUT, POST
회원 삭제/members/{id}DELETE

POST - 신규 자원 등록 특징
1. 클라이언트는 등록될 리소스의 URI를 모른다.
회원 등록 /members -> POST
POST /members
2. 서버가 새로 등록된 리소스 URI를 생성해준다.
HTTP/1.1 201 Created
Location: /members/100
3. 컬렉션(Collection)
서버가 관리하는 리소스 디렉토리
서버가 리소스의 URI를 생성하고 관리
여기서 컬렉션은 /members

API 설계 - PUT 기반 등록

기능URI메서드
파일 목록/filesGET
파일 조회/files/{filename}GET
파일 등록/files/{filename}PUT
파일 삭제/files/{filename}DELETE
파일 대량 등록/filesPOST

PUT - 신규 자원 등록 특징
1. 클라이언트가 리소스 URI를 알고 있어야 한다.
파일 등록 /files/{filename} -> PUT
PUT /files/star.jpg
2. 클라이언트가 직접 리소스의 URI를 지정한다.
3. 스토어(Store)
클라이언트가 관리하는 리소스 저장소
클라이언트가 리소스의 URI를 알고 관리
여기서 스토어는 /files

API 설계 - HTML Form 사용

HTML Form은 GET, POST만 지원
AJAX 같은 기술을 사용해서 해결 가능 -> 회원 API 참고
여기서는 순수 HTML, HTML Form 이야기
GET, POST만 지원하므로 제약이 있음

기능URI메서드
회원 목록/membersGET
회원 등록 폼/members/newGET
회원 등록/members/new, /membersPOST
회원 조회/members/{id}GET
회원 수정 폼/members/{id}/editGET
회원 수정/members/{id}/edit, /members/{id}POST
회원 삭제/members/{id}/deletePOST

HTML Form - 신규 자원 등록 특징
1. HTML Form은 GET, POST만 지원
2. 컨트롤 URI
GET, POST만 지원하므로 제약이 있음
이런 제약을 해결하기 위해 동사로 된 리소스 경로 사용
POST의 /new, /edit, /delete가 컨트롤 URI
HTTP 메서드로 해결하기 애매한 경우 사용 (HTTP API 포함)

3. URI 설계 개념

1. 문서(document)
단일 개념(파일 하나, 객체 인스턴스, 데이터베이스 row)
ex) /members/100, /files/star.jpg

2. 컬렉션(collection)
서버가 관리하는 리소스 디렉터리
서버가 리소스의 URI를 생성하고 관리
ex) /members

3. 스토어(store)
클라이언트가 관리하는 자원 저장소
클라이언트가 리소스의 URI를 알고 관리
ex) /files

4. 컨트롤러(controller), 컨트롤 URI
문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행
동사를 직접 사용
ex) /members/{id}/delete

4. 정리하며...

POST와 PUT의 차이, 그리고 순수 HTML Form과 ajax를 활용했을 때 차이를 중점으로 가져가보자.
PUT은 실무에서 많이 쓰이지는 않지만, 게시판 수정과 같은 기능에서 어울리는 방법이다.
HTML Form은 HTML코드에서 GET과 POST요청을 생성하여 전송하지만, GET과 POST만 지원한다는 한계가 있다.
이 한계를 해결하기위해 동사로 명명한 컨트롤러 URI를 통해 추가 프로세스를 실행하는 방법과 자바스크립트에서 실행되는 ajax를 활용하여 한계를 해결할 수 있다.

이정도 남기고, 다음으로 넘어가자...


이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗
https://inf.run/YZxop

profile
아키텍처 설계부터 고민하는 개발자

0개의 댓글