ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [부스트코스]웹의 동작 원리(HTTP 프로토콜의 이해)
    CS기초/웹 2020. 1. 19. 23:46
    728x90
    반응형

    *이 글은, 아래 부스트코스의 웹프로그래밍 강의를 듣고 작성되었습니다. 

    https://www.edwith.org/boostcourse-web/lecture/16661

     

    [LECTURE] 2) 웹의 동작 (HTTP 프로토콜 이해) : edwith

    들어가기 전에 사람과 사람이 전화 통화를 하기 위해서도 몇 가지 규약이 필요합니다. 서로 알아들을 수 있는 말을 사용해야 하며, 한쪽이 말할 때 다른 쪽에서는 들어야 합니다. 또한... - 부스트코스

    www.edwith.org

     

    인터넷과 웹

     

    WWW(World Wide Web).  간단히, (Web)이란 인터넷 상에 연결된 사용자들이 서로의 정보를 공유할 수 있는 무형의 네트워크 공간을 의미한다. 웹은 인터넷 상에서 텍스트나 그림, 소리, 영상 등과 같은 정보를 하이퍼텍스트 방식으로 연결하여 제공하는 일종의 서비스로서, 인터넷과는 다른 개념이나, 인터넷 구조의 절대적 위치를 차지하고 있는 것은 맞다. 

    웹의 기능은 크게 세가지,

    1. URL - 웹 자원의 통일된 위치 지정 방식
    2. HTTP - 자원을 검색하고 접근 가능한 프로토콜
    3. HTML - 자원들 사이를 쉽게 항해 가능한 언어

    로 볼 수 있다. 

    인터넷은 컴퓨터가 서로 연결되어 TCP/IP 통신 프로토콜을 통해 정보를 주고받는 컴퓨터 네트워크를 일컫는 말이다. 인터넷에서는 웹 뿐만 아니라 전자메일, SSH, Telnet 등 다양한 서비스를 제공한다. 

    물리적인 하나의 컴퓨터에는 여러개의 서버가 동작할 수 있고, 각각의 서버는 포트라는 값으로 구분하는데, 그 중 HTTP는 80번 포트를 사용한다. 포트는, 클라이언트 프로그램이 네트워크 상의 특정 서버 프로그램을 지정할 때 사용된다. IP 주소로 컴퓨터를 찾았다면, 포트번호로는 그 컴퓨터 안에서 동작하는 서버 프로그램(서비스) 중 누구에게 데이터를 전달해야 하는지를 구분하기 위해 사용된다. 

     

     

    웹의 동작하는 원리

     

    우리는 크롬이나 인터넷 익스플로러 등의 웹 브라우저를 통해,

    찾고자 하는 웹페이지의 URL 주소를 입력하고, 원하는 결과를 받아본다.

    그러면 우리가 URL 주소를 입력하고, 원하는 데이터를 받아보는 그 사이에 어떤 일이 일어나는지

    좀 더 자세히 살펴보자. 

     

     우리가 URL(Uniform Resource Locator)주소를 입력하면, 사용자가 입력한 URL 주소 중에 도메인 네임 부분을 DNS(Domain Name Server) 에서 검색한다.

     

    인터넷에 연결된 모든 컴퓨터, 노트북, 스마트폰, TV, 태블릿 등의 통신기기들은 모두 서로를 식별할 수 있는 고유의 주소를 가지는데, 이렇게 배정된 주소를 IP 주소 라고 한다. 이 IP 주소를 숫자로 되어있어, 매번 외우기가 힘들기 때문에, 기억하기 쉬운 문자로 표현해 준 것이 바로 도메인 네임이며, google.com, naver.com 등이 이에 해당된다. DNS에는 해당 도메인 주소에 해당하는 IP 가 무엇인지 알려주는 사전같은 역할을 한다. DNS 에서 해당 도메인 주소에 해당하는 IP 주소를 찾았으면, IP주소와 사용자가 입력한 URL 정보를 함께 전달한다. 이는 HTTP 프로토콜을 사용하여 HTTP 요청메세지를 생성한다. 이렇게 생성된 HTTP 요청메세지는 TCP 프로토콜을 사용해 인터넷을 거쳐 해당 IP 주소의 컴퓨터로 전송된다. 이렇게 도착한 HTTP 요청메세지는 HTTP 프로토콜을 사용하여 웹페이지 URL 정보로 변환된다. 웹서버는 도착한 웹페이지 URL 정보에 해당하는 데이터를 검색한다. 검색된 웹 페이지 데이터는 또다시 HTTP 프로토콜을 사용해 HTTP 응답메세지를 생성한다. 이렇게 생성된 응답 메세지는 TCP 프로토콜을 사용해 인터넷을 거쳐 원래의 컴퓨터로 다시 전송된다. 도착한 HTTP 응답메세지는 HTTP 프로토콜을 사용해 웹페이지 데이터로 변환되고, 변환된 웹페이지 데이터는 웹 브라우저에 의해 출력되어 우리가 볼 수 있게 된다. 

     

    HTTP(Hyper-Text Transfer Protocol)

     

    HTTP는 서버/클라이언트 모델을 따르는 인터넷 상에서 데이터를 주고받기 위한 프로토콜을 의미한다. HTTP는 HTML 문서, 이미지, 동영상, 텍스트 등 어떤 종류의 데이터도 전송할 수 있도록 설계되어있다. 

    클라이언트에서 요청을 보내면 서버는 요청을 처리해 응답한다. 

    또한, HTTP는 무상태(stateless) 프로토콜이다. 무상태 프로토콜이란, 클라이언트가 요청한 것에 대한 응답을 하기 전, 서버에 연결을 하는데, 이 연결을 응답 후 바로 끊는다. 클라이언트가 바로 다음 것을 요청한다고 하더라도, 서버는 이 클라이언트가 아까 요청했던 클라이언트인지 전혀 알수가 없다. 

    장점은, 불특정 다수를 대상으로 하는 서비스에는 적합하고, 접속유지를 최소한으로 해 더 많은 유저의 요청처리를 할 수 있다.

    단점으로는, 클라이언트의 이전 상태를 전혀 알 수가 없다. 

    그래서 HTTP  쿠키로 이 문제를 해결하고 있다.

    쿠키는 간단히 말해, 사용자가 같은 웹사이트를 방문할 때마다 읽힌 정보를 해당 웹사이트의 서버에 저장해 놓는 정보조각이다. 

     

    HTTP Request & Response

    클라이언트는 URI(Uniform Resource Identifiers) 을 이용해 자원의 위치를 찾는다. 

    ( URL이 가리키는게 자원 위치였는데, 최근엔 Rewrite 등의 Apache, Tomcat 등의 핸들러 때문에

    URI 라는 용어를 더 많이 사용한다고 한다.)

     

    https://en.dict.naver.com/#/search?query=hello 

    이 URI 를 보면, https 는 http 에서 ssl 인증서를 통해 보안이 강화된 http 프로토콜 이고,

    en.dict 는 네이버의 서브도메인, naver 는 com 의 서브도메인, com 은 최상위 도메인, serch 는 경로 또는 파일명이며, 뒤에는 쿼리문을 의미한다. 

     

    HTTP Request

    이 URI 를 통해 IP 주소를 찾으면, 포트번호와 함께 HTTP 프로토콜을 통해 요청메세지를 보낸다. 

    이 요청되는 데이터들이 아무렇게나 가는게 아니라, 정해진 규칙에 의해서 간다. 이것을 요청 데이터 포맷 이라고 한다.

    요청메세지는, 

    1. 헤더부분, 2. 빈 줄 부분, 3. 요청 바디 부분

    이렇게 세 부분으로 나뉜다.

    (출처: MDN Documentation)

     

    요청메서드는 GET, PUT, POST, DELETE 등이 있다. 

    GET -  리소스를 클라이언트로부터 가져온다.
    POST - URL에 새로운 데이터를 보낸다.
    PUT - URL 에 저장된 정보를 보낸다.
    DELETE - URL 에 저장된 리소스를 삭제한다.

     

     

    헤더부분에는 옵션으로서 요청에 대한 설명 및 본문에 대한 설명이 기록되며,( 위에서는 /create_page)

    빈 줄에는 요청에 대한 모든 메타정보가 전송되었음을 알린다.

    본문에는 요청과 관련된 내용 혹은 문서가 포함된다.

    요청메서드가 GET 일 경우에는 바디 부분이 없고 모든 요청 자원이 URI 뒤에 있다. 

    따라서 바디 부분은 POST나 PUT 을 사용할 때 들어온다. 

     

    HTTP Response

     

    응답 데이터 포맷도 요청 데이터 포맷과 마찬가지로, 

    1. 헤더부분, 2. 빈줄부분, 3. 응답 바디 

    부분으로 구성되어있다.

    첫 줄에는 반드시 HTTP 프로토콜 버전, 응답 상태 등이 나오고,

    나머지 헤더부분에는 날짜, 웹 서버 이름과 버전, 콘텐츠 타입, 캐시 제어 방식 등의 부가적인 정보가 오고,

    빈 줄 다음에는 실제 응답 리소스 데이터가 나온다.

     

     

     

    728x90

    댓글

Designed by Tistory.