[HTTP/HTTPS 프로토콜] 누워서 생각없이 보는 웹 이야기 1편

 

 

 

 

우리가 구글이나 네이버같은 특정 사이트를 접속하면 익숙한 글자들이 보일것이다 https://www.google.com

 

이것을 흔히 주소라고 부르는데 만약 우리가 친구집에 놀러가기로 했는데 집위치를 모른다 그러면 친구에게 뭐라고 물어볼까?

 

" 야 집주소좀 알려줘봐 "

 

그주소 맞다 우리가 특정 사이트의 접속하기 위해서는 그 특정사이트의 주소를 알아야한다

주소를 좀더 다르게 말하면 URL 즉 인터넷에서 정보의 위치를 알려주는 표준 주소체계 라고한다 표준주소체계... 이게 무슨말일까?

 

구글, 네이버, 유튜브 등 많은 웹사이트들의 주소들이 만약 전부 제각각 다르다면 어떨까? 내가원하는 사이트로 가는것이 번거로울것이다

하지만 우리는 naver.com, google.com, youtube.com 등 비슷한 규칙의 URL을 가지고 쉽게 접근할수있다

이것을 우리는 표준주소체계, 즉 약속이라고 부르는것이다

 

 

 

 

 

URL 뜯어보기

 

 

이제 URL에 대해서 본격적으로 알아보도록 하자 사진으로만 봐선 뭔지모르겠지만 사실 무척이나 간단하다

통신규칙://인터넷호스트주소/경로 이게 URL의 규칙이다

 

오늘우리가 알아볼것은 맨앞에 통신규칙 HTTP와 HTTPS에 대해서 알아볼것이다 나머지 호스트주소나 경로는 나중에 차근차근 설명하겠다 통신규칙(Protocol)이 무엇일까?

 

프로토콜이라고 불리우는것인데 이것은 컴퓨터들 간의 원활한 통신을 위해 지키기로 약속한 규약이라고 한다

이것을 쉽게풀어보면 우리가 컴퓨터를 이용할떄 키보드, 스피커, 마우스, 모니터 등 많은 장비들을 연결하여 사용한다

각각 다른장비이면서 제조사 마다 다른 제품인데도 불구하고 잘 연결된다 왜일까?

 

제조사마다 기능은 다르지만 서로 연결하기위해 설계할땐 이렇게해줘 라고 약속해놓았기떄문이다

그래서 제조사마다 각각 다른성능과 디자인을 가지고있어도 어느컴퓨터에 연결해도 잘되는것이다

 

다른국가에 이메일을 보낸다고 가정해보자 그 국가가 쓰는 방법이있을것이고 우리도 우리가 쓰는 방법이 있을것이다

그리고 그것은 서로 다른방법이라고 볼수있다

우리는 우리만에 주는방법을 통해서 'A'라는 글자를 다른국가에 전송한다고 생각해보자 그러면 다른국가는 'A'라는

글자를 받아야하는데 우리들의 방식으로 전송했기떄문에 다른국가에선 이를 알아듣지못한다

 

그래서 이런식으로 보내줘 그러면 이렇게 받을게 라고 약속한것이 프로토콜이라고 볼수있다

 

이것을 웹에도 적용해보면 똑같이 적용이된다.

만약 A라는 회사에서 새로운 웹브라우저를 만들어서 내보내면 그 브라우저를 설치해서 사용하기만 하면된다

개발자들이 따로 그 브라우저에 맞는 소스들을 따로 만들필요가없다 왜일까?

 

" 새로만들어도 이건 이렇게하고 이건 이렇게해줘 " 라고 약속해놓았기떄문이다

이제 프로토콜이 무엇인지 어느정도 감이잡혔으니 우리는 그중에서 웹프로토콜인 HTTP와 HTTPS에 대해서 알아보자

웹프로토콜이라고 하면 웹에서 쓰이는 통신규칙이라고 할수있겠다

 

 

 

 

 

 

 

 

HTTP(HyperText Transfer Protocol)

 

HTTP는 HyperText Transfer Protocol 의약자로써

하이퍼텍스트를 빠르게 교환하기 위한 프로토콜의 일종으로, 서버와 클라이언트의 사이에서 어떻게 메시지를 교환할를 정해 놓은 규칙이다

 

말이 어려우니 한번 풀어서 생각해보자 우리가 웹브라우저를 통해서 특정사이트에 접속하게되면 무슨일이 일어날까?

여기서부터는 어느정도 기본지식이 필요한데 우선 쉽게 요약을해보겠다

 

URL주소가 HTTP프로토콜 형식에 맞춰서 서버에 전송이되는데 서버는 이걸보고

" 아 이녀석을 보여주면 되겟구나 " 라고 하면서 다시 HTTP프로토콜 형식에 맞춰서 웹브라우저에 보낸다 그리고 우리가보는 사이트가 나오는것이다 끝이다

 

그러면 HTTPS는 뭘까? URL주소가 HTTP프로토콜 형식에 맞춰서 서버에 전송되는 과정이나 서버에서 받는 과정에서 

만약 다른사용자가 어느방법을 사용해서 정보를 까보게되면 어떻게될까? 큰일난다 거기엔 많은 정보들이 담겨있기때문이다

 

그래서 HTTP프로토콜에 암호화기능을 넣은것이 HTTPS로써 보안기능을 추가한것이라고 볼수있다 또한 HTTP는 80번 포트를 사용하고 HTTPS는 443번 포트를 사용한다 포트가 무엇인지는 다른게시글에 써있으니 참고해보기 바란다

 

그리고 HTTP프로토콜의 특징으로는 상태정보를 저장하지 않는다는 특징을 가지고있는데 이게무슨말이냐면 내가 구글에 접속한뒤 조금있다가 다시접속해도 구글은 내가 같은컴퓨터인지 모른다는것이다

 

이제 HTTP 프로토콜에 대해서 조금더 심층있게 알아보도록하자 가볍게 볼사람은 여기까지만 보고 넘어가주면 되겠다

 

 

 

 

 

 

HTTP 심화

 

우선 위에서 설명했듯이 HTTP/HTTPS 프로토콜은 웹브라우저(클라이언트)가 서버와 통신하기위해서

정해놓은 규칙이라고 설명했을것이다 그러면 어떤식으로 HTTP 프로토콜은 서버와 통신을 하는지 알아보자

 

우선처음 우리가 https://www.google.com에 접속하기위해서 URL을 입력후 엔터를 눌렀다고치자

그러면 웹브라우저는 해당되는 사이트 IP주소를 찾기위해서 캐시와 DNS를 뒤적거린다

DNS는 인터넷에서 쓰이는 전화번호부 같은것으로 모든 URL에는 고유의 IP를 가지고있는데

 

우리가 요청한 웹서버를 호스팅하는 컴퓨터의 IP를 말한다 만약 내컴퓨터에 서버를깔고 사이트를 만들면 내컴퓨터의 IP를 받는것이된다 그래도 내가 접속하려는 사이트의 IP가 없다면 어떻게될까?

 

그러면 ISP의 DNS서버에서 DNS쿼리를 통해서 호스팅하는 서버를 찾기시작한다 이제 위에서 말했던 HTTP웹 프로토콜에 의해서 서버에 요청을 보내게되고 이것을 서버가 받게되면 우리한테 보여질 HTML 컨텐츠를 보내주게 되는것이다

 

여기서잠깐 웹서버의 뜻은 무엇일까? 웹서버(apache..)는 Html, 이미지, xml등 정적리소스를 처리하는데 특화되있는 녀석으로 속도가 빠르지만 복잡한 로직처리에는 불리하다 그래서 나온것이 Web Application Server로 WAS(Tomcat 등)라고 부른다

 

WAS는 Sevlet, 비즈니스 로직을 처리하는데 특화되있는 녀석으로 정적리소스를 처리하는것은 웹서버보단 느리지만

웹서버에서 처리못하는 기능들을 처리할수있다 보통하나만 쓰기보다는 두개를 섞어서 쓰는경우가 많다(정적리소스는 웹서버로, 동적리소스는 WAS로)

 

 

 

 

 

 

자 여기서 HTTP프로토콜에 의해서 서버에 요청을 보낸다고했는데 이것을 좀더 자세히풀어보자 Spring Framwork와 Tomcat서버를 이용해서 설명해보겟다

 

우선 위에서 말했듯이 웹서버 IP를 찾게되면 서버에 요청을 보내게되는데 HTTP프로토콜 형식에 맞춰서

서버에 보내게된다

이때 클라이언트가 보낸 URL데이터 정보들을 HttpSuvletRquest라는 객체에 담아서 보내게되는데

이떄 요청을 어떻게 하냐에 따라서 Get, Post 등 여러 방식이있는데 이걸 전부담기에는

너무 설명이 길어지니깐 우선 그렇다고 알아두면좋다

 

 

 

HTTP프로토콜에 메세지 형식이다 내가 URL을 통해 사이트접속요청을 하면 웹서버에 Rquest 메세지를 보낸다고했는데 위에사진같은 형태로 전송된다고 보면된다

 

맨윗줄에는 HTTP프로토콜의 버전과 상태코드(2xx이면 성공이라는 뜻) 접속하는 웹애플리케이션 서버와

컨텐츠의 타입 등을 가지고있다 크게 Header 부분과 공백, 그리고 Body부분으로 나뉘며 이는 요청형식에 따라서 차이가 난다

 

보낼떄는 Request 메세지로요청 받을때는 Response메세지로 받게된다