ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP의 메소드
    Computer기본지식/Http지식 2021. 7. 13. 11:32
    반응형

    이번 포스팅은 HTTP의 메소드(GET, POST, PUT, DELETE, PATCH)에 관련된 내용을 포스팅하려고 한다. 메소드를 잘 쓰는게 진짜 중요하다고 생각한다. 나도 코드를 짤 때 보면 GETPOST가 많이 헷갈리고 어떤 상황에 메소드를 쓰고 어떻게 API를 전달하는지 궁금하여 공부를 시작했다. 나의 생각을 정리해보겠다.

     

    일단 처음으로 메소드에 대해서 알아보자.

    우리는 URI로 서버에 접근한다. 그럼 메소드를 사용하기 전에 URI를 어떻게 설계하는게 좋을지 고민해보는게 좋다.

    URI의 설계방식은 "리소스"를 중심으로 해야한다.

     

    예를 들어 회원 등록(/member-create), 회원 조회(/member-search)등으로 설계한다면 리소스가 중심이 되지 않는다.

    member라는 리소스로 회원 등록(/member), 회원 조회(/member)와 같이 설계해야한다.

    그러면 어떻게 이것을 구분해야할까? 그것을 바로 메서드로 구분한다. 똑같은 member가 어떻게 행동하느냐이다.

     

    주요 메소드에 대해서 살펴보자. GET, POST, PATCH, PUT, DELETE가 있다. 하나씩 자세히 살펴보자.

     

    1. GET

    GET 메소드리소스를 조회 할 때 사용한다. 서버에 전달하고 싶은 쿼리는 URI뒤에 붙혀서 전달하고 서버는 그것을 해석하여 클라이언트에게 응답해준다. 아래의 그림과 같이 동작한다.

     

    2. POST

     

    POST는 요청 데이터를 서버로 보낼 경우 사용한다. 메세지 바디로 서버에게 요청을 전달하여 서버는 그것을 로직으로 처리하여 등록 및 프로세스 처리에 사용한다. 아래의 그림과 같이 동작한다.

     

     

    여기서 중요한 점은 서버가 새로운 URI를 생성한다는 것이다. 그리고 다음에 사용자가 그 URI로 접근할 경우 인식 할 수 있다.

     

     

    3. PUT

    PUT메소드는 리소스를 대체한다고 생각하면 된다. 새로 들어온 정보를 새롭게 만든다. 예를 들어 USER필드가 원래 있었는데 새로 PUT을 이용한 데이터에 USER필드가 없으면 USER필드는 사라진다. 그럼 POST와 차이가 뭘까?

    차이는 "클라이언트의 리소스 인식"이다. PUT의 경우는 /members/100이라는 URI로 접근한다. 이 뜻은 클라이언트가 리소스를 알고 있다는 얘기이다(Store). POST의 경우는 /members로 접근하여 서버가 URI를 생성한다(Collector).

     

    4. PATCH

    PATCH는 일부분만 변경하고 싶을 경우 사용된다. PUT과는 다른 특성을 가진다.

     

    이렇게 주요 메소드들에 대해서 알아봤다. 메소드는 자기가 사용하고 싶은 상황에 따라 적재적소 사용하면 된다.

    이제 이런 주요 메소드들의 속성에 대해서 알아보자. 크게 3가지를 가지고있다.

     

    1. 안전(Safe Methods)

    호출해도 리소스를 변경하지 않는다. GET을 빼고는 모두 리소스를 변경시키기 때문에 안전이라는 속성에 해당되지는 않는다.

     

    2. 멱등(Idempotent Methods)

    몇 번을 호출해도 결과가 똑같은 특성을 얘기한다. GET은 당연히 결과가 같고 PUT, DELETE는 무언가를 대체시키고 최종적으로 나오는 결과는 같으니 멱등에 해당된다. POST일 경우는 만약 결제가 중복되서 일어나면 결과는 다르다. 멱등에 해당되지 않는다.

     

    3. 캐시가능(Cacheable)

    이 특성은 응답결과 리소스를 캐시해서 사용해도 괜찮은가를 나타내는 것이다.

    거의 모든 메소드가 이 특성을 가져있다. 그러나 POST, PATCH는 캐시 키로 접근해야해서 구현이 어렵다는 특징이 있다.

     

     

    그럼 이제는 실제로 클라이언트와 서버가 어떤 상황에서 어떤 메소드를 이용해야하는가를 살펴보자.

    요즘은 대부분 JSON형태로 데이터를 주고 받는다. 그러나 기본적인 HTTP에 대해서 아는 것도 중요하니 복습해보자.

     

    크게 클라이언트에서 서버로 데이터를 전달하는 방법이 2가지가 있다.

    쿼리 파라미터를 통한 전달(GET), 메세지 바디(POST, PUT, PATCH)를 통한 전달이 있다. GET을 이용한 파라미터 전달은 동적인 전달과 정적인 전달이 있다.

    동적인 전달은 (http://www.google.com/search?q=hello&hl=ko)와 같은 예시이다. 뒤에 쿼리를 추가한 URI이다.

    정적인 전달은 그냥 HTML, IMAGE파일을 데이터로 전달하는 것이다.

     

    그리고 HTML FORM을 이용한 데이터 전송 및 HTTP API를 통한 데이터 전송을 알아보자.

     

    HTML FORM을 이용한 데이터 전송의 기본적인 구조 코드이다.

    <form action="URI" method="get" class="form-example">
      <div class="form-example">
        <label for="name">Enter your name: </label>
        <input type="text" name="name" id="name" required>
      </div>
      <div class="form-example">
        <label for="email">Enter your email: </label>
        <input type="email" name="email" id="email" required>
      </div>
      <div class="form-example">
        <input type="submit" value="Subscribe!">
      </div>
    </form>

    동작은 Form내에 있는 submit버튼을 클릭 시 action내에 있는 URI에 요청이간다. 그리고 input태그 name을 기준으로 http메세지를 생성해 전송한다. (username=kim & age= 20)

    method가 post면 메세지 바디, get이면 쿼리로 전달하게 된다.

     

    다음으로 HTTP API를 살펴보자.

    일단 주로 사용하는 경우는 서버에서 서버 통신, 앱 클라이언트 통신, 웹 클라이언트(AJAX)통신 등이 있다.

    무거운 HTML보다도 데이터가 든 JSON을 주고 받으면서 더 효율적인 통신이 가능하다.

    HTTP API는 무엇을 기반으로 설계하냐에 따라 2가지로 나눌 수 있다. 컬렉션(POST기반), 스토어(PUT기반)이다.

    이 둘의 차이는 컬렉션은 서버가 리소스를 관리해주는 입장이고, 스토어는 클라이언트가 리소스를 알고 클라이언트가 관리하는 입장의 차이이다.

     

     

     

    이렇게 HTTP METHOD에 대해수 알아봤다. 

    어떻게 URI를 설계해야 되는지 그리고 어떤 상황에 GETPOST를 적절하게 사용해줘야하는지가 감이 잡힌다.

    직접 코드로 구현해보면서 복습을 해야겠다.

    반응형

    'Computer기본지식 > Http지식' 카테고리의 다른 글

    HTTP 헤더  (0) 2021.07.16
    HTTP 상태코드(1xx, 2xx, 3xx, 4xx, 5xx, PRG)  (0) 2021.07.14
    HTTP구조 및 네트워크  (0) 2021.07.12

    댓글

Designed by Tistory.