Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

가능세계

[Network]HTTP Methods란? HTTP 메서드 종류 알아보기 본문

Blog/Network

[Network]HTTP Methods란? HTTP 메서드 종류 알아보기

cona-tus 2023. 9. 11. 08:14

network-icon

 

리소스에 특정 동작을 수행하고 싶다면 어떻게 해야 할까요?

예를 들어, 회원이라는 리소스를 조회하고, 등록하고, 수정하고, 삭제하는 등의 행위는 어떻게 구분할까요?

 

바로 HTTP 요청 메서드(Http Request Methods)를 이용합니다.

 

메서드에는 어떤 것들이 있을까요?

 

 

1. HTTP 메서드 종류를 살펴봅시다

리소스에 수행할 행동을 HTTP 요청 메서드로 정의할 수 있습니다. 각각의 메서드는 서로 다른 기능을 수행하지만, 일부는 서로 공유하기도 합니다.

 

1-1. 주요 메서드

  • GET : 존재하는 리소스에 대한 요청, 조회
  • POST : 요청 데이터 처리
    • 주로 등록에 사용
    • PUT, DELETE의 기능도 수행
  • PUT : 존재하는 리소스에 대한 전체 변경
    • 리소스를 대체하거나 해당 리소스가 없으면 생성
  • PATCH: 존재하는 리소스의 부분 수정
  • DELETE: 특정 리소스 삭제

 

1-2. 기타 메서드

  • HEAD: 메시지 헤더를 획득
    • GET과 유사하나 메시지 바디를 제외하고 상태줄과 헤더만 반환
  • OPTIONS: 대상 리소스에 대한 통신 가능 옵션을 요청
    • 주로 CORS에서 사용
  • CONNECT: 대상 리소스로 식별되는 서버에 대한 터널을 설정
    • 거의 사용하지 않음
  • TRACE: 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행
    • 거의 사용하지 않음



2. 주요 메서드에 대해 알아봅시다

2-1. GET

GET 메서드는 리소스의 조회를 요청합니다. 성공하면 요청한 데이터가 포함된 응답이 반환됩니다. 주로 데이터를 읽거나 검색할 때 사용하며, 수정할 때는 사용하지 않습니다.

 

또는 쿼리 파라미터를 사용해서 데이터를 전달할 수도 있습니다. (e.g. GET /search?q=hello&hl=ko HTTP/1.1)

 

파라미터들은 URL의 일부분이기 때문에 브라우저 히스토리에 남아있으며, 따라서 민감한 데이터를 처리할 때 GET 요청을 사용해선 안 됩니다.

 

- 데이터 조회 과정

1. 100번 회원 정보를 얻기 위해 클라이언트가 서버에 GET 요청 메시지를 전달합니다.

GET /members/100 HTTP/1.1
Host: localhost:8080

 

2. 서버가 내부 데이터베이스를 조회하여 /members/100에 해당하는 응답 데이터를 생성하고 클라이언트에 전달합니다.

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 34

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



2-2. POST

POST 메서드는 클라이언트가 메시지 바디를 통해 서버로 보낸 요청 데이터를 처리합니다. 주로 신규 리소스 등록이나, 변경된 프로세스 처리 등에 사용됩니다.

 

- 데이터 전송 과정

1. 클라이언트는 서버에 POST 요청 메시지를 전달합니다. 메시지 바디를 통해 등록할 데이터를 서버로 전송합니다.

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

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

 

2. 서버는 받은 데이터를 데이터베이스에 등록하고, 신규 리소스 식별자를 생성합니다.

3. 그리고 Location 헤더를 통해 리소스가 생성된 경로를 전달하며, 메시지 바디를 통해 등록된 리소스를 클라이언트에게 전송합니다.

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 34
Location: /members/100

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

 

POST 메서드는 주로 요청 데이터를 처리하는 데 사용합니다.

다만 여러 쓰임새가 있으므로 리소스 URI에 POST 요청이 오면, 요청 데이터를 어떻게 처리할지 리소스마다 따로 정해야 합니다.

 

- POST 메서드의 예시

  • HTML Form에 입력한 데이터의 전송
    • 회원 가입, 상품 주문
  • 파일 업로드, 게시
    • 게시판 글 작성, 댓글 등록
  • 서버가 아직 식별하지 않은 새 리소스를 생성
    • 신규 주문 생성
  • 기존 자원에 데이터를 추가
    • 한 문서 끝에 내용 추가
  • 데이터 프로세스의 상태 변경(처리 단계)
    • 주문 -> 결제완료 -> 배달 시작 -> 배달완료
  • 다른 메서드로 처리하기 애매한 경우



2-3. PUT

PUT 메서드는 리소스를 대체하는 메서드입니다. 다시 말해, 기존 리소스가 있다면 리소스를 완전히 대체하고, 해당 리소스가 없다면 새로 생성합니다.

 

PUT 메서드는 폴더에 파일을 복사하는 것과 유사합니다. 폴더에 파일이 없으면 새로 생성되고, 기존에 똑같은 파일이 있다면 덮어쓰는 것처럼 생각해 볼 수 있습니다.

 

- 리소스 대체 과정

1. 100번 회원의 리소스를 교체하기 위해 서버에 PUT 요청 메시지를 전달합니다.

PUT /members/100 HTTP/1.1
Content-Type: application/json

{
  "age": 50
}

 

2. /members/100에 해당하는 리소스를 완전히 대체합니다.

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

3. 기존 데이터가 완전히 대체되기 때문에 username 필드가 삭제됩니다.

{
  "age": 50
}

 

중요한 점은, POST 메서드와 달리 클라이언트가 리소스를 식별한다는 것입니다. 클라이언트가 리소스의 구체적인 경로를 알고 있으며, URI를 지정합니다.



2-4. PATCH

PATCH 메서드는 리소스를 부분 변경할 때 사용합니다.

PATCH가 지원되지 않는 서버에서는 POST를 사용할 수 있습니다.

 

- 리소스 수정 과정

1. age 값만 변경하기 위해 서버에 PATCH 요청 메시지를 전달합니다.

PATCH /members/100 HTTP/1.1
Content-Type: application/json

{
  "age": 50
}

 

2. /members/100에 해당하는 리소스가 부분적으로 변경됩니다.

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

3. username 필드는 사라지지 않고, age만 업데이트 됩니다.

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



2-5. DELETE

DELETE 메서드는 리소스 제거합니다.

 

- 리소스 삭제 과정

1. 100번 회원 정보를 삭제하기 위해 서버에 DELETE 요청 메시지를 전달합니다.

DELETE /members/100 HTTP/1.1
Host: localhost:8080

 

2. 데이터베이스에서 /members/100에 해당하는 리소스 삭제합니다.

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

 

 


참고