Http #4. Http 메소드

김동욱·2022년 3월 9일
0
post-thumbnail

이전 포스팅에서 봤던 http메세지 start-line엔 메소드를 적는 부분이 있었다. HTTP 메소드는 클라이언트가 웹 서버에게 사용자 요청의 목적이나 종류를 알리는 수단이다. 메소드의 종류에 따라 데이터를 처리하는 방식이 달라진다.

최초의 HTTP에서는 GET 메소드 하나밖에 없었지만 이후 다양한 메소드들이 생겨났다. 9개 정도 있지만 주로 사용하는 메소드는 5개이다.

1. GET

GET의 특징은 다음과 같다
1. 주로 리소스 조회용으로 많이 씀
2. 서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달
3. 메세지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음

예시를 보자

'GET요청 메세지'
GET /members/100 HTTP/1.1
Host: localhost:8080

위의 메세지처럼 GET요청을 서버로 전달하면 서버는 전달받은 메소드와 쿼리등 데이터를 파악해 알맞은 정보를 만든다.

'찾은 정보'
{"name": "kimdonguk"}

서버에서 알맞은 정보를 찾은 후 클라이언트로 응답(Response)메세지를 전달한다.

'Response 메세지'
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 34
.//원래 점이 없지만 띄어쓰기 안되서 넣음
{"name": "kimdonguk"}


2. POST

POST의 특징은 다음과 같다
1. 요청 데이터를 처리
2. 메세지 바디를 통해 서버로 요청 데이터를 전달할 때 많이 사용
3. 신규 리소스 등록, 데이터를 작성하는것 뿐만 아닌 프로세스 처리에도 사용된다.

예시를 보자

'POST요청 메세지'
POST /members/create HTTP/1.1
Content-Type: application/json
.
{"name": "kimdonguk"}

서버는 POST요청이 오면 body로 들어온 데이터와 쿼리등을 파악해 로직을 수향한다.

만약 서버에서 /members/create로 post요청이 들어오면 메세지 body에 담겨진 데이터를 알맞은 DB에 저장하는 코드가 있으면 DB에 데이터가 저장된다.

서버에서 데이터를 처리한 후 클라이언트로 응답(Response)메세지를 전달한다.

'Response 메세지'
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 34
Location: /members/create
.
{"name": "kimdonguk"}

GET의 Response 메세지와 다르게 처리된 api주소와(Location) 처리된 데이터도 함께 보여준다.

번외

예를 들어 메세지 바디로 "김동욱"을 조회하고 싶어서 GET메소드를 사용해 서버에 요청을 할 수 있지만 GET메소드의 바디를 지원하지 않는 서버들이 있다. 그럴 때는 POST를 사용하자.


3. PUT

PUT의 특징은 다음과 같다

  • 리소스를 완전히 대체(덮어 씌어짐)
  • 리소스가 있으면 대체 없으면 생성

예시를 보자

PUT /members/create/kimdonguk HTTP/1.1
Content-Type: application/json
.
{"name2": "kimdonguk2", "age": 30}

여기서 POST와의 차이점은 PUT은 URI가 리소스의 정확한 위치를 알고 있어야 한다!!!

기존의 /members/create/kimdonguk에 들어있던 데이터는

{"name": "kimdonguk"}

였지만 PUT으로 인해

{"name2": "kimdonguk2", "age": 30}

로 변경되어 필드가 완전히 수정되었다. 물론 처음부터 알맞은 키 밸류를 직접 작성해 만들 수도 있지만 너무나도 일이 많아진다. 이때 사용할 수 있는것이 PATCH이다.


4. PATCH

PUT은 리소스를 완전히 덮어버리지만 PATCH는 부분만 수정할 수 있다.

예시를 보자.

PATCH /members/create/kimdonguk HTTP/1.1
Content-Type: application/json
.
{"name3": "kimdonguk3"}

POST로 인해 데이터는

{"name3": "kimdonguk3", "age": 30}

으로 변경되었다. PUT과는 다르게 부분 변경이 된것을 확인할 수 있다.


5. DELETE

DELETE는 말 그대로 데이터를 지운다

DELETE /members/create/kimdonguk HTTP/1.1

이렇게 하면 kimdonguk 데이터는 삭제가 된다.


6. 메소드의 속성

HTTP 메소드의 속성에는 안전(Safe Methods), 멱등(Idempotent Methods), 캐시가능(Cacheable Methods)가 있다.

다음 단어가 무엇을 의미하는지 살펴보도록 하자.

6-1. 안전(Safe Methods)

이 말은 계속해서 메소드를 호출해도 리소스를 변경하지 않는다는 뜻이다. 주요 메소드중에는 GET 메소드가 안전하다고 볼 수 있다.

6-2. 멱등(Idempotent Methods)

이 말은 메소드를 계속 호출해도 결과가 똑같다는 뜻이다. Get, PUT, DELETE는 멱등하다고 볼 수 있지만 POST나 PATCH는 멱등하다고 볼 수 없다.

6-3. 캐시가능(Cacheable Methods)

캐시가능하다는 말은 말 그대로 캐싱을 해서 데이터를 효율적으로 가져올 수 있다는 뜻이다. GET, HEAD, POST, PATCH가 캐시가 가능하지만 실제로는 GET과 HEAD만 주로 캐싱이 쓰인다고 한다.

이를 토대로한 http 메소드를 다음의 표와 같이 요약할 수 있다.

profile
안녕하세요. 부산에서 근무하고 있는 프론트엔드 개발자 김동욱입니다. 영어 공부 겸 개발 공부를 위해서 글을 작성하고있습니다.

0개의 댓글