티스토리 뷰

WEB/HTTP

[HTTP] HTTP 메서드

MAENCO 2021. 7. 28. 11:45
반응형

클라이언트(사용자)가 서버에 무언가 요청하기 위해서는

서버에 내가 무엇을 요청하는지 알려주어야 할 것이다.

 

URI

우선 클라이언트는 URI를 통하여 서버의 문을 두드린다.

URI(Uniform Resource Identifier)는 두 가지를 포함하고 있는데

URL과 URN이다

마지막 두글자만 알면 되는데 LOCATION과 NAME

즉 위치와 이름이다.

현재는 URL 을 거의 대부분 사용하고 있다고 하니

URI = URL이라고 생각하면 될 것 같다 (엄밀히 말하면 다르지만)

 

 

URL 구조

이 URL은 위와 같은 식으로 이루어져 있는데

우리가 인터넷 주소창에서 흔히 보는 형태이다

다만 포트번호가 생략이 되는데

이는 https의 경우 443 포트를 대부분 사용하기 때문에 생략하는 것이다.

( 더 자세한 것은 따로 다루겠다)

 

자 이제 문을 두드렸다.

근데 서버의 문은 어디로든 통할 수 있는 문이라서

어디로 가고 싶은지 정확히 알려주어야 한다.

 

이에 클라이언트는 구체적인 요구 사항들을

HTTP 메시지에 담아 서버와 소통한다.

HTTP 메시지 구조

 

HTTP 메서드

이렇게 메시지에 다양한 정보를 담는데

첫 번째 요청 라인에 들어가는 것이 바로

HTTP의 메서드이다.

 

주로 사용 하는 메서드는 아래와 같다

 GET

 POST

 PUT

 PATCH

 DELETE

 

클라이언트가 이런 메서드들은 구분하여 요청 라인에 담아

서버로 요청을 하게 되면 서버에서는 이 요청 라인을 보고 리소스를 식별하여 응답을 한다.

 

1.GET

리소스를 조회하는 요청을 할때 GET 메서드를 사용한다.

여기에는 쿼리 파라미터나 다른 데이터가 포함되지 않는다.

(물론 포함할 수 있고 예외도 있지만, 통상 조회라는 기능에는 불필요하다)

 

2.POST

만능에 가까운 POST는

주로 요청 데이터를 처리할 때 사용한다

 

즉 HTTP 메시지 바디에 데이터를 같이 보내어 서버 쪽에서

해당 데이터를 가지고 처리를 하는 것이다.

 

예를 들어

클라이언트가 회원가입을 한다고 할 때

form 데이터로 회원 아이디와 비밀번호를 입력하여 전송한다고 하자

 

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

 

위의 내용이 메시지 바디에 담겨 서버로 전달되게 되고

서버는 이 데이터를 받아 작업을 처리하고 응답하게 된다

 

POST의 핵심을 위와 같이 요청된 데이터를 처리한다는 것인데

단순히 DB의 값을 변경하는 것을 넘어서 프로세스의 상태가 변경되는 경우에 POST를 사용한다.

(또한 다른 메서드로 처리하기 애매한 경우에도 POST를 사용한다)

 

3.PUT

정말 간단하게 파일을 덮어쓴다는 개념으로 보면 된다

우리가 어떤 파일을 받아 폴더 안에 복사 붙여넣기를 하는데

기존에 동일한 파일이 존재하면 덮어쓰기를 하게 된다

허나 만약 파일이 없다면 그냥 새로 파일이 생기게 되는 것이다.

 

덮어쓰기를 유의해야 하는데

PUT의 덮어쓰기

기존에 있던 리소스를 부분 수정하였어도

같은 리소스라면 새롭게 덮어 씌어버린다

 

 

자칫 POST와 비슷하게 데이터를 처리하는 것이네 라고 생각할 수도 있지만

둘의 가장 큰 차이점은 리소스의 위치를 아는 것과 모르는 것이다

 


[URI 리소스]

리소스를 간단히 살펴보기 위해서 잠시 URI로 돌아가 보자

CRUD

여기서 리소스는 CRUD 같은 행위가 아니라

오른쪽의 members 즉 회원 그 "자체" 이다

 

그리고 CRUD 같은 행위를 "구분" 하는 것이

HTTP 메서드이다

 

이는 메서드를 활용함으로써 행위를 구분하여 식별하게끔 설계할 수 있는 것이다


다시 돌아와서 POST와 PUT의 차이점을 알아보자

 

POST의 경우 리소스를 정확히 모른다:

www.test.com/members 

에서 회원등록을 한다고 가정하자 이럴 경우 POST는 정확한 리소스를 모르는 상태에서

"새로운" 리소스를 생성해내는 것이다

 

만약 회원이 생성될 때마다 아이디가 1씩 올라간다는 로직이라면

POST를 할 때마다 새로운 아이디를 가진 회원이 생길 것이다

 

하지만 PUT의 경우 리소스를 정확히 안다:

www.test.com/members/3 

이렇게 ID 값을 정해준 후 PUT 요청을 하면 수백 번 요청을 하던

3이란 ID의 리소스만 수정이 되는 것이다

(있으면 덮어쓰기, 없으면 생성)

 

4. PATCH

PUT 같은 경우 덮어쓰기 때문에 부분 수정이 비교적 까다로운데

이를 보완하는 것이 PATCH다

PATCH

정말 간단하게 변경된 부분만 적용시키는 것이 PATCH다

 

5. DELETE

해당 리소스를 삭제한다

 

 

이 외에도 여러가지가 있지만

메서드의 속성인 멱등(Idempotent)만 간단히 살펴보겠다

멱등은 얼마를 호출하던 결과가 똑같은 것을 말하는데

 

PUT과 DELETE가 이에 해당한다

이둘은 값을 덮어쓰거나 삭제하기 때문에 몇번을 호출해도

항상 똑같은 결과물을 만들어 낸다.

 

 

 

 

+

보통 관례상 C - POST / R - GET / U - PUT / D - DELETE를 쓴다고 하는데

GET 이나 DELETE 같은 경우는 너무 명확하지만

POST / PUT 같은 경우는 조금 애매한 부분들이 있다

 

내가 알아본 바로는 POST와 PUT의 사용을 구분 짓는 차이는

어떤 프로세스가 실행이 되느냐 안되느냐의 차이다

 

단순히 리소스 (이름, 나이, 주소 등등)가 변경되는 것은 PUT을 사용해도 무방하지만

어떤 상태 (주문 확인 중, 배송 중 등등)가 변경되는 것은 해당 프로세스가 실행되었을 때

초기의 값과 그 후의 값이 다를 수 있기 때문이다

예를 들어 주문 확인 중에서 -> 배송 중으로 넘어갈 때는 리소스 자체가 달라지기 때문에 POST의 사용이 더 적절하다는 것이다

 

더보기

개인 학습을 위해 작성 되는 글 입니다.

제가 잘못 알고 있는 점에 대한 지적 / 더 나은 방향에 대한 댓글을 환영합니다.

 

 

반응형

'WEB > HTTP' 카테고리의 다른 글

[HTTP] 쿠키와 세션 그리고 캐시(1)  (0) 2021.08.01
[HTTP] Header(헤더)  (0) 2021.08.01
[HTTP] API 그리고 REST API  (0) 2021.07.30
[HTTP] HTTP의 특징  (0) 2021.07.28
[HTTP] 인터넷 네트워크  (0) 2021.07.27
댓글