brunch

You can make anything
by writing

C.S.Lewis

by 에디의 기술블로그 Dec 17. 2017

웹프로그래밍 스터디 - 1.HTTP 따라잡기(2)

- HTTP 메시지, 헤더 등

  "웹프로그래밍 스터디"라는 주제로 글을 작성하고자 한다. 그동안 공부하고 싶었던 주제를 정리했는데, 웹개발의 전반적인 내용이 포함될 예정이다. 아마 바쁘다는 핑계로 글 올라오는 속도가 매우 느릴 수 있다. 하루에 한시간씩이라도 시간을 내서 스터디 해야한다!! 라고 내 자신에게 다짐해본다. 아래와 같은 목차로 진행 예정이며, 목차는 변경 될 수는 있다.


https://brunch.co.kr/@springboot/15



1.3 HTTP 메시지

  HTTP 메시지는 HTTP 애플리케이션 간에 주고받은 데이터이다. HTTP 메시지는 Request(요청), Response(응답) 메시지로 나눌수 있는데, 둘다 아래와 같은 형식으로 구성된다. 

시작줄(Start Line)

헤더(Header)

본문(Body)

 

1.3.1 시작줄

  시작줄에 대해서는 번역서마다 다르게 표현을 했다. [HTTP 완벽 가이드-인사이트] 에서는 "시작줄" 이라고 번역을 하였다. [웹을 지탱하는 기술-멘토르 출판사]에서는 "스타트 라인" 이라고 표현한다. [그림으로 배우는 HTTP&Network Basic-영진닷컴] 에서는 원서에서 시작줄을 메시지 헤더에 포함하였고 "리퀘스트 라인 또는 상태 라인" 이라는 표현을 사용한다. Request(요청) 메시지의 경우에는 서버에게 무엇을 해달라고 부탁하며 형식은 아래와 같다. 


<메서드>  <요청 URL>               <버전> 

GET          /resource/a.png       1.1

 

  요청 메시지의 메서드는 GET 이며, 요청 URL 은 /resource/a.png , 버전은 HTTP 1.1 이다. 메서드의 종류는 GET, HEAD, POST, PUT, TRACE, OPTIONS, DELETE 이다. 대부분 개발자가 잘 알고 있을거라 생각된다. GET은 리소스의 취득을 의미하며 가장 많이 사용하는데 지정한 URI의 정보를 가져온다. 자세하게 알고 싶다면 [HTTP 완벽가이드-인사이트] 서적을 꺼내보길 바란다. 

  


  응답 메시지의 형식은 아래와 같다. 버전, 상태코드, 사유구절 로 구성된다.

<버전>       <상태 코드> <사유 구절>

HTTP 1.1       200              OK

  HTTP 버전은 1.1 이고 상태 코드는 200(성공), 사유 구절은 OK로 문서가 성공적으로 응답한다는 의미이다. 꼭 알아야 할 상태코드는 200, 302, 304, 400, 403, 500, 503 등이다. 상태 코드는 [HTTP 완벽가이드] 의 588page 에 정리가 되어있다. 사유 구절은 상태코드와 일대일로 대응되며, 사용자에게 요청 중에 무슨 일이 일어났는지 알려주기 위한 텍스트 구문이다. [웹을 지탱하는 기술] 에서는 "사유 구절"을 "텍스트 구문" 으로 번역하였다. 개인적으로 시간이 된다면 [HTTP 완벽가이드] 의 원서를 구해서 읽어봐야할 것이다. 번역서의 경우 번역이 매끄럽지 못한 경우가 종종 있어서, 완벽한 이해를 위해서는 오히려 원서가 좋을 것이다. 하지만 난 영어를 잘 못하니깐... 번역서를 읽을 수밖에 없다. 신입 개발자가 이 글을 보고 있다면 앞으로 꼭 영어 공부를 열심히 하기를 바란다. 

  

1.3.2 헤더

  헤더는 메시지 본문에 대한 부가적인 정보를 표현한다. [HTTP 완벽가이드] 에서는 일반헤더, 요청헤더, 응답헤더, 엔티티헤더, 확장 헤더로 분류한다. [웹을 지탱하는 기술] 에서는 헤더를 따로 분류하지는 않고, 응답에서만 사용하는지, 요청에서만 사용하는지, 응답요청 둘다 사용하는지 정도만 분류하였다. [그리으로 배우는 HTTP&Network Basie] 에서는 확장헤더는 빼고 일반헤더, 요청헤더, 응답헤더, 엔티티헤더로 분류하였다. 책이 없는 사람은 아래 링크에서 헤더에 대해서 확인할수 있다. 

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers 

Date : 메시지를 생성한 시간

Content-Type : 메시지의 바디 내용이 어떠한 종류인가에 대한 타입 지정

Content-Language : 언어 태그

  참고로, Content-Type은 미디어 타입 및 문자 인코딩을 지정하는데, 예를 들어서 "Content-Type : application/xml; charset=utf-8" 로 표현할 수 있다. 미디어 타입, 문자 인코딩, 언어 태그 는 서버에서 지정하는 헤더인데 만약 클라이언트가 원하는 값이 있다면 Accept 관련 헤더로 요청할 수 있다. 클라이언트와 서버가 주고 받는 헤더 값을 확인하고 싶다면 아래와 같은 두가지 방법으로 확인이 가능하다. 


방법 1 - 크롬 개발자 도구

  크롬 브라우저에서 F12 로 개발자도구를 실행할 수 있다. (왠만한 개발자는 다 알고 있으리라 생각되니 간단히 소개만 한다.)


방법 2 - 피들러(Fiddler) 활용하기

  피들러 역시 대부분 개발자가 사용하므로 소개만 한다. 참고로 매우 유용한 툴이다. 


1.3.3 본문

  메시지의 실제 정보를 담고 있다. 


1.3.4 쿠키

  쿠키에 대해서 모르는 개발자는 없겠지만, 간단하게라도 설명해보겠다. 지난 글에도 설명했듯이 HTTP 는 스테이트리스(Stateless)한 프로토콜 이다. 즉, 서버가 클라이언트의 애플리케이션 상태를 보존하지 않는다는 것이다. 수많은 클라이언트(사용자)의 정보를 저장하려면 CPU, 메모리에 부담이 될 수 있다. 이 문제를 해결하기 위한 좋은 방법으로 쿠키(Cookie) 를 사용할 수 있다. 쿠키는 세션쿠키와 지속 쿠키 로 나눌 수 있는데, 세션쿠키는 사용자가 브라우저를 닫으면 지워지는 쿠키다. 지속쿠키는 클라이언트의 PC에 저장이 되기 때문에 브라우저를 닫고 나중에 다시 브라우저를 실행하여도 쿠키를 사용할 수 있다. 또한, 쿠키의 만료 시간을 지정할 수 있다. 쿠키에 대해서는 [HTTP 완벽가이드] 의 305page 를 참고하면 된다. 




  웹프로그래밍 스터디라는 주제의 첫 번째 글로 [1.HTTP 따라잡기] 라는 주제로 글을 써봤다. 웹개발자로 살아가면서 가장 중요하지만, 가장 놓치기 쉬운 주제라서 제일 먼저 작성해봤다. 내용은 많이 부족하니, HTTP 에 대해서 [HTTP 완벽가이드] 를 정독하기를 바란다. 다음 글에서는 [2.웹서버와 WAS 의 차이] 라는 주제로 글을 쓸 예정이다. 


























브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari