📖/spring(김영한)

모든 개발자를 위한 HTTP 웹 기본 지식 1일차

모팔구 2023. 8. 12. 15:23
728x90
반응형

섹션0 소개

소개영상

-

 

섹션1 인터넷 네트워크

인터넷 통신

IP(인터넷 프로토콜)

  • IP의 역할
    • 지정한 IP 주소에 데이터 전달
    • 패킷이라는 통신 단위로 데이터 전달
  • IP 프로토콜의 한계
    • 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷이 전송됨
    • 비신뢰성: 중간에 패킷이 사라지거나 패킷이 순서대로 전송되지 않을 수 있음
    • 프로그램 구분: 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 경우 구분이 어려움

TCP, UDP / PORT

-

DNS

  • DNS(Domain Name System): 도메인 명을 IP주소로 변환

 

섹션2 URI와 웹 브라우저 요청 흐름

URI

  • URI(Uniform Resource Identifier): Uniform, 리소스를 식별하는 통일된 방식. Resource, 자원. URI로 식별할 수 있는 모든 것(제한 없음), Identifier: 다른 항목과 구분하는데 필요한 정보. 로케이터(locatior), 이름(name) 또는 둘 다를 추가로 분류될 수 있다. 
    • URL(Unitform Resource Locator): 리소스가 있는 위치를 지정, 변할 수 있다.
    • URN(Uniform Resource Name): 리소스에 이름을 부여, 변할 수 없다 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화되지 않음
  • URL의 전체 문법: scheme://[userinfo@]host[:port][/path][?query][#fragment]
    • scheme: 주로 프로토콜을 작성.
      • 프로토콜: 어떤 방식으로 자원에 접근할 것인지 정의한 약속
        • http: 80, https: 443. 두 포트번호는 생략 가능하다
    • userinfo@:   url에 사용자 정보를포함해서 인증할 때 사용. 거의 사용하지 않음
    • host: 호스트명. 도메인명 또는 IP 주소를 직접 입력 가능
    • :port: 접속 포트 번호.
    • /path: 리소스 경로. 계층적 구조를 가짐
    • ?query: 키값형태. ?로 시작하고 &로 추가 가능 ex) ?keyA=valueA&keyB=valueB
      • query parameter, query string 등으로 불림. 웹서버에 제공하는 파라미터, 문자 형태
    • #fragment: html 내부 북마트 등에 사용하고 서버에 전송되는 정보는 아님

웹 브라우저의 요청 흐름

-

 

섹션3 HTTP 기본

모든 것이 HTTP

  • HTTP(HyperText Transfer Protocol): HTTP 메시지에 거의 모든 유형의 데이터를 전송함. HTTP/1.1을 가장 많이 사용함
  • HTTP 특징
    • 클라이언트 서버 구조
    • 무상태 프로토콜(stateless), 비연결성(connectionless)
    • HTTP 메시지
    • 단순하고 확장 가능함

클라이언트 서버 구조

  • Request(요청), Response(응답) 구조
  • 클라이언트는 서버에 요청을 보내고, 응답을 대기함. 서버가 요청에 대한 결과를 만들어서 응답함
  • 비즈니스 로직이나 데이터 같은 것들은 서버에 다 밀어넣고 클라이언트는 UI, 사용성 등에 집중해서 개발함

Stateful, Stateless

  • 무상태(Stateless): 서버가 클라이언트의 상태를 보존하지 않음. 서버의 확장성이 높다(스케일 아웃) 즉 응답 서버를 쉽게 바꿀수 있다는 장점이 있지만 클라이언트가 추가적으로 데이터를 전송해야 한다는 단점이 있다. 
  • 상태 유지(Stateful): 항상 같은 서버가 유지되어야 한다. 클라이언트가 요청하면 서버 자체가 요청하는 상태를 보관하기 때문에 응답 서버를 쉽게 바꿀 수 없다. 
  • 모든 것을 무상태로 설계 가능하기도 하고 불가능하기도 하다 로그인이 필요 하지 않은 단순한 서비스 소개 화면의 경우 무상태로 진행하면 되지만 로그인이 필요한 경우 상태 유지를 사용해야 한다. 일반적으로 브라우저 쿠키와 서버 세션 등을 사용해 상태를 유지한다. 상태 유지는 최소한만 사용하는 것이 좋다 

비 연결성(connectionless)

  • HTTP는 기본적으로 연결을 유지하지 않는다. 일반적으로 초 단위 이하의 빠른 속도로 응답할 수 있다. 한시간동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작기 때문에 서버 자원을 매우 효율적으로 사용할 수 있다. 
  • 비연결성의 한계
    • TCP/IP 연결을 새로 맺어야 함 - 3 way handshake할 시간 추가
    • 웹 브라우저로 사이트를 요청하면 HTML뿐만 아니라 자바스크립트, css, 추가 이미지 등 수많은 자원이 함께 다운로드된다
    • 지금은 HTTP 지속 연결(Persistent Connections)로 문제를 해결한다.

HTTP 메시지

  • HTTP 메시지의 기본 구조
    start-line 시작 라인
    header 헤더
    empty line 공백 라인(CRLF)
    message body 메시지 바디
    1. start-line: request-line(요청) / status-line(응답)으로 나뉨
      • request-line 구성: method SP(공백) request-target SP HTTP-version CRLF(엔터)
        1. method: 서버가 수행해야 할 동작을 지정한다
          • GET: 리소스 조회
          • POST: 요청 내역 조회
          • PUT
          • DELETE
        2. request-target: 절대경로(/)로 시작하는 경로
        3. HTTP-version
      • status-line 구성: HTTP-version SP status-code SP reason-phrase CRLF
        1. HTTP-version
        2. status-code
          • 200: 성공
          • 400: 클라이언트 요청 오류
          • 500: 서버 내부 오류
        3. reason-phrase: 사람이 이해할 수 있는 짧은 상태 코드 설명 글
    2. header: HTTP 전송에 필요한 모든 부가 정보를 가지고 있음 ex) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트 정보, 서버 애플리케이션 정보, 캐시 관리 정보 등등. 표준 헤더가 많고 필요시 임의의 헤더를 추가할 수 있다 
      • header 구성: field-name : OWS(띄어쓰기 허용) filed-value OWS
    3. message body: 실제 전송할 데이터. ex) html 문서, 이미지, 영상 JSON 등등 바이트로 표현할 수 있는 모든 데이터 전송 가능 
  • HTTP 요청 메시지. 요청 메시지도 body 본문을 가질 수 있음
    GET /search?q=hello&hl=ko HTTP/1.1
    Host: www.google.com
    (CRLF)
  • HTTP 응답 메시지
    HTTP/1.1 200 OK
    Content-Type: text/html; charset=UTF-8
    Content-Length: 3423
    (CRLF)
    <html>
        <body>
            ...
        </body>
    </html>

 

 

반응형
728x90
반응형