[Web] HTTP 웹 기본 지식 정리 - 1 (Internet NW, URI, HTTP)

lwy210·2023년 9월 14일
0

web-study

목록 보기
1/2

출처 : 인프런 - 모든 개발자를 위한 HTTP 웹 기본 지식 (by 김영한 님)




인터넷 네트워크

IP

IP(Internet Protocol인터넷 프로토콜)

  • 역할
    • 지정한 IP 주소에 데이터 전달
    • 패킷이라는 통신 단위로 데이터 전달
  • 클라이언트-서버 패킷 전달 : 클라이언트가 인터넷에 있는 노드를 통해 서버에 전달하고 서버가 전달되었음을 클라이언트에게 알린다.
  • 한계
    • 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송 ⇒ 패킷 소실
    • 비신뢰성 : 중간에 패킷이 사라지거나 패킷이 순서대로 가지 않는 문제가 생길 수 있음
    • 프로그램 구분 : 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면 IP만으로 구분 불가

TCP

TCP(Transmission Control Protocol전송 제어 프로토콜)

  • 프로토콜 계층
  • 특징
    • 연결지향(TCP 3 way handshake 가상연결) : 1. 클라이언트가 서버에게 접속 요청 2. 서버가 클라이언트에게 접속 요청 및 요청 수락 3. 클라이언트가 요청 수락
    • 데이터 전달 보증 : 클라이언트로부터 서버가 데이터를 잘 받으면 받았다고 클라이언트에게 알림
    • 순서 보장 : 클라이언트에서 서버로 패킷 전송 중 순서가 바뀌면 바뀐 순서부터 다시 패킷을 전송

UDP

UDP(User Datagram Protocol사용자 데이터그램 프로토콜)

  • 기능이 거의 없음
  • 연결지향 - TCP 3 way handshake X
  • 데이터 전달 보증 X
  • 순서 보장 X
  • 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
  • IP와 거의 같으며, PORT/체크섬 정도만 추가된 것임

PORT

PORT는 같은 IP 내에서 프로세스를 구분해준다.

  • 0 ~ 65535: 할당 가능
  • 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음
    • FTP - 20, 21
    • TELNET - 23
    • HTTP - 80
    • HTTPS - 443

DNS

DNS(Domain Name System도메인 네임 시스템)

  • DNS 등장 배경 : (IP의 문제점) 기억하기 어렵고 변경될 수 있음
  • 도메인 명을 IP 주소로 변환





URI와 웹 프라우저 요청 흐름

URI

URI(Uniform Resource Identifier)

  • 단어 뜻
    • Uniform : 리소스 식별하는 통일된 방식
    • Resorce : 자원, URI로 식별할 수 있는 모든 것
    • Identifier : 다른 항목과 구분하는데 필요한 정보
  • 종류
    • URL(Uniform Resource Locator)
    • URN(Uniform Resource Name)

URL 분석

scheme://[userinfo@]host[:port][/path][?query][#fragment] 
https://www.google.com:443/search?q=hello&hl=ko
  • scheme (e.g. https)
    • 주로 프로토콜(어떤 방식으로 자원에 접근할지 약속규칙 e.g. http, ftp) 사용
  • userinfo
    • URL에 사용자 정보를 포함해서 인증
    • 거의 사용 X
  • host (e.g. www.google.com)
    • 호스트명 : 도메인명 또는 IP 주소를 직접 사용가능
  • PORT (e.g. 443)
    • 접속 포트 : 일반적으로 생략, http-80, https-443
  • path (e.g. search)
    • 리소스 경로(path), 계층적 구조
    • e.g.) /home/file1.jpg
  • query (e.g. ?q=hello&hl=ko)
    • key=value 형태 (? : 시작, & : 추가)
    • query parameter, query string, 웹 서버에 제공하는 파라미터
  • fragment (e.g. #getting-started-introducing)
    • html 내부 북마크 등에 사용. 서버에 전송하는 정보 X


웹 브라우저 요청 흐름

https://www.google.com/search?q=hello&hl=ko
  1. HTTP 요청 메시지 생성 및 전송(패킷 생성)
  2. 웹 브라우저 -- 요청 패킷 전달 --> ... 구글 서버
  3. 웹 브라우저 ... -- 요청 패킷 도착 --> 구글 서버
  4. 웹 브라우저 ... <-- 응답 패킷 전달 -- 구글 서버
  5. 웹 브라우저 <-- 응답 패킷 도착 -- ... 구글 서버
  6. 웹 브라우저 HTML 렌더링





HTTP

HTTP(HyperText Transfer Protocol)

  • HTTP 메시지에 모든 것을 전송!
    • HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML(API)
    • 거의 모든 형태의 데이터 전송 가능
    • 서버에 데이터를 주고 받을 때도 대부분 HTTP 사용
  • 특징
    • 클라이언트 서버 구조
    • 무상태 프로토콜(stateless), 비연결성
    • HTTP 메시지
    • 단순함, 확장 가능

클라이언트 서버 구조

  • Request Response 구조
  • 클라이언트는 서버에 요청을 보내고, 응답을 대기
  • 서버가 요청에 대한 결과를 만들어서 응답

무상태 프로토콜

Stateless

  • 서버가 클라이언트의 상태를 보존하지 않는다.
  • 장점 : 서버 확장성 높음 (스케일 아웃)
  • 단점 : 클라이언트가 추가 데이터 전송

[ Stateful, Stateless 차이 ]
노트북 구매 예시 생각해보기

  • Stateful(상태 유지) : 중간에 다른 점원으로 바뀌면 안된다. (바뀐다면 상태 정보를 바뀐 점원에게 알려주어야 함)
    • 항상 같은 서버가 유지되어야 하며 서버 장애에 취약하다.
    • e.g. 로그인 (로그인 상태를 서버에 유지. 보통 브라우저 쿠키, 서버 세션을 사용해 상태 유지)
  • Stateless(무상태) : 중간에 다른 점원으로 바뀌어도 된다.
    • 즉, 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입 가능
    • 서버가 장애나도 다른 서버를 사용할 수 있다.
    • 응답 서버를 쉽게 바꿀 수 있다. ⇒ 무한한 서버 증설 가능
    • e.g. 로그인이 필요 없는 단순한 서비스 소개 화면

비 연결성

비 연결성(connectionless)

  • 연결을 유지하는 모델 : TCP/IP 연결을 통해 클라이언트가 요청하고 서버가 응답하는 것이 끝나도 서버는 계속 연결을 유지해 서버의 자원을 소모한다.
  • 연결을 유지하지 않는 모델 : TCP/IP 연결을 통해 클라이언트가 요청하고 서버가 응답하는 것이 끝나면 바로 TCP/IP 연결을 종료해 최소한의 자원을 사용한다.
  • HTTP는 기본이 연결을 유지하지 않는 모델
  • 초 단위의 이하의 빠른 속도로 응답
  • 서버 자원을 매우 효율적으로 사용 가능 (수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 매우 작음)
  • 한계 : TCP/IP 연결을 새로 맺어야 함,웹 브라우저로 사이트를 요청하면 HTML 이외에도 자스, css 등 수많은 자원이 함께 다운로드
  • 극복 : HTTP 지속 연결로 문제 해결. HTTP/2, HTTP/3 에서 최적화


HTTP 메시지

[ 시작 라인 ]

  • 요청 메시지 : GET /search?q=hello&hl=ko HTTP/1.1
    • HTTP 메서드 : GET
      • 서버가 수행해야 할 동작 지정
      • 종류 : GET(리소스 조회), POST(요청 내역 처리), PUT, DELECT, ...
    • 요청 대상 : /search?q=hello&hl=ko
      • 절대경로[?쿼리]
      • 절대경로 = "/"로 시작하는 경로
    • HTTP Version : HTTP/1.1

  • 응답 메시지 : HTTP/1.1 200 OK
    • HTTP 버전 : HTTP/1.1
    • HTTP 상태 코드 : 200
      • 요청 성공, 실패를 나타냄
      • 200(성공), 400(클라이언트 요청 오류), 500(서버 내부 오류)
    • 이유 문구 : OK
      • 사람이 이해할 수 있는 짧은 상태 코드 설명 글

[ HTTP 헤더 ]

  • 요청 메시지 : Host: www.google.com
  • 응답 메시지 : Content-Type: text/html;charset=UTF-8 Content-Length: 3423
  • 용도
    • HTTP 전송에 필요한 모든 부가 정보
    • e.g. 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보, ...
    • 표준 헤더가 너무 많으며, 필요시 임의의 헤더 추가 가능

[ HTTP 메시지 바디 ]

  • 응답 메시지 : <html> <body>...</body></html>
  • 실제 전송할 데이터
  • HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능


0개의 댓글