2019. 5. 6. 08:42ㆍNetwork
HTTP를 정리하기 전에
공부를 하며 블로그에 내가 공부했던 기술, 지식들을 블로그에 적으려고 했지만, 글 하나하나 쓰는 것이 쉽지 않아 계속해서 미뤘다. 하지만 혼자 생각하고 정리 하는 것보다 남들이 보는 블로그를 적으니 더 열심히 찾게 되고 공부를 하는 것 같다.
웹을 공부하는 사람들이라면 HTTP를 알아야 하지만 특히! Back-End 개발자에게 HTTP가 얼마나 중요한지 알아야 한다며 귀에 딱지가 생길 정도로 이야기를 많이 들었다. 하지만 누군가 HTTP가 뭐죠? 라고 묻는다면 HTTP에 대해서 자세하게 이야기 하진 못하고 그저 헤더, 바디 stateless? 정도만 이야기 했었다. 블로그를 적을 때마다 항상 HTTP에 정리해야지를 반복하며 계속 생각했지만, 이런 저런 핑계로 하지 않다 얼마 전 계속해서 공부했던 HTTP에 대해, 특히 HTTP의 구성에 대해 말을 하지 못한... 아주 치욕스러운 일이 있었기 때문에 정리 해보려한다.
HTTP란
Hyper Text Transfer Protocol
웹 상에서 데이터를 주고 받기 위해 고안된 통신규약(Protocol)이다. HTTP는 원래 html문서를 주고 받기 위해 만들어졌다고 한다. 하지만 현재는 데이터를 주고 받는 용도로 쓰인다. 저번 글에 TCP/IP 와 UDP에 대해 글을 잠깐 쓴 적이 있는데, 서버 에서 클라이언트로 요청과 응답을 전송한다.(TCP/IP를 기반으로 이용하는 응용 프로토콜)
Stateless
HTTP를 공부하다 보면 무상태라는 말을 많이 듣는다. 상태가 없다는 말인데, 처음 들었을 때는 무슨 말인지 이해하기 힘들었었다. 위에서도 이야기 했듯이 HTTP는 원래 html문서를 주고 받기 위해 만들어졌다. 예전에는 터미널 텍스트 형식으로 인터넷을 사용했다고 한다.(아래 그림) 하지만 1989년 영국 출신 박사 팀버너스 리에 의해 HTTP 통신규약이 만들어 졌다. 텍스트로만 내용을 주고 받았는데 html단을 주고 받아 시각적으로, 정보량 차원으로 멋진 문서를 주고 받게 된 것이다.
이렇듯 클라이언트는 html을 서버에게 한번 요청하고 서버는 그 요청을 받은 다음 클라이언트에게 html단을 보여주게 된다. 그렇다면 HTTP는 HTML만 보여주는가? 아니다. 이제 HTTP는 plain text로 부터 JSON 데이터 및 XML과 같은 형태의 정보도 주고 받을 수 있다.
(stateless에는 단점이 존재 한다. 단점을 보완 하기 위해 cookie와 session이 생겼는데, 쿠키와 세션도 중요한 내용이기 때문에 다음에 정리를 할 예정이다.)
요약을 하자면 HTTP는 연결을 유지하지 않는 프로토콜이기 때문에 요청(Request) 과 응답(Response)방식으로 동작한다.
HTTP Method
HTTP 메소드는 클라이언트에서 서버에 보내는 요청이 어떤 식으로 처리 되는지 명시적으로 방식을 정해 주는 것이다.
서버는 클라이언트 요청의 주어진 메소드에 해당하는 작업을 수행한다.
(주요 메소드로는 GET, POST, PUT, DELETE)
GET
GET은 URI로 식별된 리소스를 요구한다. 가져올 리소스의 내용은 서버가 URI를 해석한 결과이다.
GET은 리소스를 전송할 수 있다. 하지만 URL 뒤 쿼리에 담아 보내기 때문에 보안상 문제가 발생할 수 있으며, 보낼 수 있는 데이터 크기에 제한이 있기 때문에, 데이터를 생성 할 때 사용하지 않고 가능한 데이터를 읽을 때 많이 사용된다.
POST
POST는 엔티티를 전송하기 위해 사용한다. GET에서 설명 한 것처럼 GET으로도 엔티티를 보낼 수 있다. 하지만 보안상, 데이터 크기가 제한 되기 때문에 POST를 사용하여 목적을 명확하게, 보낼 엔티티를 노출하지 않게 하기 위해 POST를 사용한다.
PUT
PUT는 목적 리소스 모든 현재 상태를 HTTP 메세지 바디의 데이터로 업데이트 한다.
DELETE
DELETE는 특정 리소스를 삭제한다.
PATCH
PATCH는 PUT과 마찬가지로 수정(update)할 때 사용한다. 하지만 큰 차이가 있다. PUT은 자원 전체를 수정할 때 사용하고, PATCH는 PUT과 다르게 자원의 일부만 수정할 때 사용한다.
HEAD
HEAD는 GET과 유사한 방식이지만, 웹 서버에서 헤더 정보이외 에는 어떤 데이터도 보내지 않는다.
대게 URI 유효성과 리소스 갱신을 확인 할 때 많이 사용한다고 한다.
CONNECT
CONNCET는 목적 리소스로 식별되는 서버로의 터널을 맺는다. TCP통신을 터널링 시키기 위해 사용한다.
주로 SSL과 TLS등의 프로토콜로 암호화된 것을 터널링 시키기 위해 사용한다.
OPTIONS
OPTIONS는 목적 리소스가 어떤 메소드를 제공하고 있는지 확인하기 위해 사용한다.
TRACE
TRACE는 목적 리소스의 경로를 따라 메세지 loop-back 테스트를 한다.
마치며?
아직 멀었다... HTTP에 대한 내용은 알수록 굉장히 방대하다. 한번에 정리 하려 하니 많은 부분들을 빼 놓을 염려가 있어 나머지 부분들은 나누어 정리 하겠다.
언제던가... 용접을 했을 때인가? 일을 하며 기본적인 일에서 문제가 자주 발생하여, 팀장님이 나에게 항상 하시던 말씀이 생각난다. 무슨 일이든 기본이 중요하다. 기본이 되어있지 않으면 언젠가는 무너지게 된다고... 어떤 일을 하든 마찬가지 인거 같다. 별거 아니라고 생각했지만 가장 중요한 것은 기본이다. 쉽다고 생각했던 것 부터 차~근~차~근 학습하고 나아간다면 언젠가 봐줄만한 개발자는 되어있겠지.
'Network' 카테고리의 다른 글
TCP 와 UDP의 차이 (3) | 2019.04.16 |
---|