[정리] 주요 HTTP Method

안녕하세요 괴짜 개발자 namedboy 입니다. 😎
이번 포스팅에서는 HTTP 메소드가 어떤 것들이 있는지 그리고 서버를 설계할 때 무엇이 필요한지 정리해 보려고 합니다. 클라이언트에서 서버로 데이터를 요청하는 방법에 대해서는 여러가지 방법이 있지만 이번 포스트에서는 HTTP에 대한 부분만 다룹니다.

API 서버를 설계하다 보면 클라이언트의 요청에 따라 서버에서 어떻게 응답해 줄 것인가?에 대해 고민을 하게 됩니다.

HTTP 요청 메소드에 대해 보통은 GET과 POST를 제일 많이 들어보셨을 겁니다.
하지만 HTTP 요청 메소드는 GET과 POST 외에도 다양한 의미를 가진 여러 메소드 들이 있습니다.

해당 메소드들은 HEAD, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH 입니다.
각 메소드들의 간단한 내용을 적어보면 아래와 같습니다.

메소드 이름 설명
CONNECT 요청한 리소스에 대해 양방향 연결을 시작하는 메소드입니다. 이는 터널을 열기 위해서 사용될 수 있습니다.
DELETE 지정한 리소스를 삭제합니다.
GET 특정한 리소스를 가져오도록 요청합니다. GET 요청은 데이터를 가져올 때만 사용해야 합니다.
HEAD 특정 리소스를 GET 메서드로 요청했을 때 돌아올 헤더를 요청합니다.
OPTIONS 목표 리소스와의 통신 옵션을 설명하기 위해 사용됩니다. 클라이언트는 OPTIONS 메소드의 URL을 특정지을 수 있으며, aterisk(*) 를 통해 서버 전체를 선택할 수 있습니다.
PATCH 리소스의 부분적인 수정을 할 때에 사용됩니다.
POST 서버로 데이터를 전송합니다. 요청 본문의 유형은 Content-Type 헤더로 나타냅니다.
PUT 요청 페이로드를 사용해 새로운 리소스를 생성하거나, 대상 리소스를 나타내는 데이터를 대체합니다.
TRACE 목표 리소스와의 루프-백 테스트 메시지를 따라서 유용한 디버깅 방법을 제공합니다.

HTTP 요청 메소드에 대한 자세한 내용은 여기에 보시면 자세하게 나와 있으니 참고하시면 좋을 것 같습니다.

우리가 API 서버를 설계할 때에는 이 메소드들과 함께 HTTP 응답 코드를 사용하여 함께 설계를 해야 합니다. 왜냐하면 요청하는 메소드에 따라 클라이언트에서 반응해야 하는 응답코드를 정하여 응답해주어야 하기 때문이죠. 응답 코드에 대한 내용은 여기에서 보시면 전체 내용을 볼 수 있습니다.

기본적인 API 서버를 만드는 경우에는 모든 메소드에 신경쓸 필요는 없습니다.
HTTP 메소드 중에서 GET과 POST 메소드를 사용하면 됩니다. 당연히 다른 메소드들도 사용할 수 있다면 좋겠지만, DELETE 같은 메소드는 실제로 파일을 삭제할 수 있는 기능을 가지고 있고 PUT 같은 경우에는 파일을 만들어내는 HTTP 호출이 가능한 메소드이기 때문에 외부의 공격에 대비한다고 생각하면 예측하지 못하는 외부 공격을 허용하지 않기 위해서는 GET과 POST 정도만 사용하고 허용하도록 설정하는 것이 좋습니다. 또 위에 나열된 형태를 유지하며 설계를 하게 되면 더 복잡한 형태의 설계 결과물만 나오게 됩니다.

그럴려면 GET과 POST가 어떤 내용인지 알아야 겠지요.
앞선 링크에 있는 내용 중 GET과 POST만 가져왔습니다.

  • GET: 특정한 리소스를 가져오도록 요청합니다. GET 요청은 데이터를 가져올 때만 사용해야 합니다.
  • POST: 서버로 데이터를 전송합니다. 요청 본문의 유형은 Content-Type 헤더로 나타냅니다.

간단한 설명만 가져와 봤습니다. GET은 말 그대로 데이터를 가져옵니다 영어 단어 GET이 가지는 의미와 비슷하게 데이터를 가져오는 것이죠. 별다른 설명이 필요 없어 보입니다.

POST의 경우에는 내용이 좀 더 붙어 있네요. 요청 본문의 유형은 Content-Type 헤더로 나타낸다고 되어 있네요. Content-Type 헤더는 HTTP의 구조에 포함되는 HEADER 값 중 하나 입니다. API 서버에 POST로 요청하는 경우 body에 데이터를 포함시켜 전송하게 되는데 이 때 해당 값의 형태를 Content-Type 헤더에 넣기 때문에 추가적인 설명이 붙게 된 것입니다.
Content-Type에 들어가는 값의 규칙은 다음과 같습니다.

1
type "/" subtype *[";" parameter]

예를 들면 아래의 형태 입니다.
text/css, text/javascript, text/html, text/plain

text라는 큰 type 아래 css, javascript, html, plain 등의 subtype이 있는거죠.


GET과 POST도 알아봤으니 클라이언트에서 요청한 GET과 POST를 API 서버에서 어떻게 응답해줄 것인지만 생각하면 됩니다.

클라이언트에서 HTTP 요청을 보냈으니 응답을 주어야 하겠죠. HTTP 응답 코드에는 정말 많은 값이 있지만 크게 나누면 정상 응답, 에러 응답이 있습니다. 그 응답 코드는 200과 500 입니다.

웹 서핑을 하다 보면 간간히 보이는 500에러 404에러 라고 얘기하는 것들이 바로 응답 코드입니다.

404도 정상이 아니기 때문에 결국은 에러 응답 코드 입니다. 다만 의미가 명확합니다. 요청한 페이지를 찾지 못했을 때 응답하는 코드 값이죠. 그래서 API 서버를 설계할 때 기본으로 200, 404 500 코드를 사용하여 전체 응답 구조를 만들어 나가면 됩니다.

여기까지가 기본적인 API 서버 설계에 필요한 간단한 HTTP 메소드 정리 내용입니다.
기본적인 설계이기 때문에 꽤 많은 부분을 그냥 넘어가기도 하고 더 필요한 내용이 있으나 기술하지 않았습니다. 기약은 없지만 앞으로의 글에서 더 자세하게 다뤄볼 예정입니다.

질문이 있으시다면 남겨주세요!