본문 바로가기
network

http 메소드

by 스르나 2021. 2. 16.

HTTP 메소드

현재 우리가 인터넷을 통해 하는 대부분의 통신은 http를 통해 이뤄진다. http 통신으로 예전에는 html을 전송하고 받는게 목적이였지만 최근에는 이미지, 동영상 등등 대부분의 리소스들을 http로 주고받는다. 이렇게 주고 받는데에 http메소드의 종류와 각 종류들의 특징을 알아보자.

 

http 메소드의 종류

http메소드의 종류는 여러가지가 있지만 아래 5개만 알면된다. 나머지는 거의 사용되지 않는다.(더욱 요약하면 get, post 2가지만 알아도 간단한 것들은 크게 상관이 없다.)

 

  1. get
  2. post
  3. put
  4. patch
  5. delete

각각의 메소드들을 만든 이유는 통신에서는 여러 상황이 존재하는데 모든 상황을 천편일률적으로 처리하는데에는 한계가 있고, URI설계에도 문제가 생기기때문에 만들어졌다.

 

그럼 5개 메소드들을 알아보자

 

1. get

우선 get 메소드의 역할은 데이터 조회이다. 우리가 서버에 회원정보 요청이나, 검색등 리소스를 요청할 때 사용한다.

이때 get으로 요청하는 것은 단순히 조회기능만 하는것이 바람직하다. 데이터를 수정한다던가, 다른 프로세스를 작동시키는것은 좋지않다. 물론 불가능하지는 않지만 get은 단순히 조회를 하기위해 만들어져서 전송할 데이터를 메세지 바디에 넣는것이 허략되지 않는다.

 

우선 get의 특징을 보면 get은 우리가 전송할 데이터가 URL에 쿼리로 들어간다. 지금 구글에 hello를 검색해보자.

그러면 저렇게 URL의 끝부분에 쿼리로 q=hello라는 문구가 들어간다. 그렇기 때문에 민감한 정보를 get 요청을 할때 보내면 다른사람에게 민감한 정보가 유출될 가능성이 있다. 또한 쿼리로서 데이터를 요청하는데 이때 쿼리의 크기가 한정적이고 작다. 그렇기 때문에 간단한 조회요청에 적합하지, 큰 용량의 데이터를 보내서 무언가를 처리하기에는 적합하지 않다.

 

2. post

다음으로는 post인데 post는 주로 요청 데이터를 처리하는데 사용된다. 요청으로 보낸 데이터를 서버가 저장한다던가, 데이터를 가공할때 주로 사용한다. 그리고 get과는 다르게 요청 데이터가 쿼리에 넣어져서 보내는게 아니라 메세지 바디에 들어간다. 그렇기 때문에 get과는 다르게 민감한 정보나 데이터의 크기가 클 경우에도 문제 없이 사용할 수 있다.

 

다음으로는 좀 이해하기 힘들 수 있는데 post는 다른 메소드들과 다르게 특이한 역할이 한가지 더 있다. 바로 다른 메소드들로 처리하기 힘들 경우에는 post를 사용하는것이다. 다르게 말하면 post는 거의 만능이라 대부분의 상황에 적합하다. 한가지 예를 들면 조회를 위해 json을 보내야하는 경우를 생각해보자. 조회에서는 요청 데이터가 쿼리에 들어가기때문에 json으로 보내는것이 적합하지 않다. 이럴때는 post를 사용해서 조회하면 된다.

 

3. put,delete,patch

위 3가지도 중요하지만 get,post에 비하면 중요도가 떨어진다.

 

put

우선 put은 데이터를 리소스를 대체할 때 사용한다. 우선 클라이언트가 요청 데이터를 보내면 이 요청데이터를 가지고 있는 위치에 있는것을 없애고 요청 데이터로 변경된다. 여기서 2가지 중요한 점이 있다.

1. 클라이언트가 리소스의 위치를 알고있어야한다.

2. 위치에 기존의 데이터가 없다면 새로 저장한다.

 

여기까지 보면 post와 무슨 차이가 있는지 이해가 안갈 수 있는데 좀 더 설명을 하면 post는 요청 데이터를 보낼뿐 리소스의 위치를 지정해서 보내는것이 아니다. 반면 put은 요청 데이터와 리소스의 위치를 모두 보낸다.(공식 문서에는 멱등성에서 차이가난다고 하는데 먼저 설명하면 post는 요청을 여러번하면 할 때마다 결과가 다르고 put은 항상 같다)

다음으로 대체한다는 표현을 확실히 표현하면 만약 서버에 "이름:홍길동, 나이:23살" 이렇게 있을때 클라이언트가 해당 리소스의 위치에 "나이:50살"이라는 요청데이터를 보내면 기존의 데이터는 없어지고 "나이 50살"만 남는다, 이름에 대한 데이터는 사라진다.

 

delete

delete는 리소스를 제거할 때 사용한다.

 

patch

patch는 리소스의 일부분을 수정할 때 사용한다.

 

 

http 메소드의 성질

 

 

http 메소드의 성질 3가지

 

1. 안전

-> 호출해도 리소스를 변경하지 않는다.

위 표를보면 알겠지만 단순 조회인 get은 요청에도 리소스는 변경되지 않으니 안전하지만 post같은 경우는 리소스의 변경이 일어날 수 있으니 불안전한것이다.

 

2. 멱등

-> 여러번 호출해도 결과가 똑같다.

한 요청을 여러번 호출해도 결과가 같다면 멱등이다. 위에서 post같은 경우는 요청 데이터를 가공하기 때문에 여러차례 호출하면 결과가 다를 수 있다. 하지만 put은 한 요청이 여러번 간다면 계속해서 요청 데이터 전부가 대체되어 저장될뿐 다른일은 일어나지 않아서 결과는 같다.

 

3. 캐시가능

-> 응답 결과 리소스를 캐싱해도 되는가?

캐싱은 리소스를 key,value로 저장하기 때문에 실질적으로는 get요청에만 키싱을 사용한다.

'network' 카테고리의 다른 글

Ip,Tcp 간략정리  (0) 2021.02.03