Computer Science/Network

HTTP 메서드 활용

mint723dev 2025. 1. 22. 01:26

HTTP 메서드가 어떻게 활용되는지에 대해 알아보자

 

클라이언트 → 서버 데이터 전송

클라이언트가 서버로 데이터를 전송하는 방법은 2가지로 분류할 수 있다

  1. 쿼리 파라미터를 통한 데이터 전송
    • GET 방식
      • domain.com/static/star.jpg (정적 데이터 조회 요청)
      • domain.com/search?q=hello&hl=ko (동적 데이터 조회 요청)
    • 검색어 및 정렬 필터에 주로 사용
  2. 메시지 바디를 통한 데이터 전송
    • POST, PUT, PATCH
    • 회원 가입, 상품 주문, 리소스 등록, 리소스 변경,... 등

메시지 바디 예시

 

메시지 바디를 통해 전송하는 방법

  1. HTML Form을 통한 데이터 전송 (GET, POST만 지원)
    • 아래와 같은 폼에 클라이언트가 데이터를 입력 후 서버에 요청한다면 어떻게 될까?
      <form action="/save" method="post">
      	<input type="text" name="username" />
      	<input type="text" name="age" />
      	<button type="submit">전송</button>
      </form>
       
    • domain.com/save라는 URI에 username과 age에 입력된 데이터가
      'application/x-www-form-urlencoded' 형식으로 인코딩 되어 메시지 바디에 포함된다.
      •  method를 GET으로 변경하는것으로 GET 전송도 가능하다.
      • 다만 이와같은 경우 데이터가 쿼리 파라미터 형식으로 전달됨을 알아두자
  2. HTTP API를 통한 데이터 전송
    • 서버에게 원하는 HTTP 메서드 방식으로 데이터를 메시지 바디에 담아 요청한다


HTTP API 설계 방법

설계 방법을 알아보기 전 간단하게 이상적인 API 설계 방법을 알아보자

 

회원 관리 시스템을 구축할 때 새로운 멤버를 등록하는 API를 설계하고 싶다면?

 

  • /members (POST)
  • /members/new (POST)

어느 게 이상적인 설계 방법일까?

 

정답은 /members (POST)이다.

 

우리는 회원을 관리하는 시스템을 구축하고 있으며, 해당 시스템의 주요 리소스는 members이다.

 

리소스가 중심이 되고, 그 행위는 HTTP 메서드가 대신해주는 것이 이상적인 설계 방식이다.


 

앞서 들었던 예에서는 /members (POST)로 요청 시 새로운 멤버를 서버가 생성해 준다.

 

요청 데이터와 응답 데이터의 예를 보자

 

요청

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

 

응답

HTTP/1.1 201 Created
Location: /members/100

 

우리는 요청 데이터에 사용자 이름과, 나이만을 입력하여 서버에 전송하였다.

 

이에 서버는 100번째 사용자가 생성되었다는 응답 메시지를 전달해 주었다.

 

이와 같이 신규 자원(새로운 멤버)을 등록함과 동시에
리소스를 식별할 수 있는 URI를 서버가 넘겨주는 방식을 컬렉션 이라 한다.

 

컬렉션 방식 POST 기반으로 신규 리소스가 등록되는 것이 가장 큰 특징이며, 가장 많이 사용된다.

회원 목록 /members GET
회원 등록 /members POST
회원 조회 /members/{id} GET
회원 수정 /members/{id} PATCH, PUT, POST
회원 삭제 /members/{id} DELETE

컬렉션 API 설계 예시


 

다음으로는 스토어 방식을 알아보자

 

스토어는 PUT 기반으로 신규 자원을 등록한다는 특징을 갖고 있다.

 

파일을 관리하는 시스템을 구축한다고 예시를 들어보자

 

파일 목록 /files GET
파일 조회 /files/{filename} GET
파일 등록 /files/{filename} PUT
파일 삭제 /files/{filename} DELETE
파일 대량 등록 /files POST

 

파일 등록 같은 경우에는 기존 파일이 있다면 덮어써야 하기 때문에 PUT 메서드가 적합하다.

 

이미 파일 등록 API가 PUT으로 등록되어 있기 때문에

 

POST 메서드는 임의로 설정 가능하다.

 

스토어 방식은 클라이언트가 리소스 URI를 알고 있어야 하며 클라이언트가 직접 리소스의 URI를 지정한다.


 

마지막으로 HTML FORM을 사용하는 방식을 알아보자

 

GET과 POST만 지원한다는 특징이 있다.

 

앞서 이상적인 API 설계 방식을 설명하며,


리소스는 URI로 행위는 HTTP 메서드가 대신하는 것이 이상적인 방식이라 이야기했는데, 

 

HTML FORM을 사용하면 사용할 수 있는 메서드가 GET과 POST 두 개로 한정적이다.

 

그렇기에 어쩔 수 없이 컨트롤 URI를 사용한다

 

컨트롤 URI는 /members/new, /members/{id}/edit 등 행위를 URI 포함시키는 방법을 말한다.

 

회원 목록 /members GET
회원 등록 폼 /members/new GET
회원 등록 /members/new, /membes POST
회원 조회 /members/{id} GET
회원 수정 폼 /members/{id}/edit GET
회원 수정 /members/{id}/deit, /members/{id} POST
회원 삭제 /members/{id}/delete POST