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