[HTTP 기본] 1

smj_716·2025년 4월 9일

스프링 완전 정복

목록 보기
12/16

1. 인터넷 네트워크

🌐 인터넷 통신은 어떻게 작동할까?

인터넷에서 컴퓨터끼리는 클라이언트 - 서버 구조로 통신한다.
한쪽이 요청하면 다른 쪽은 응답을 보내주는 방식이다. 이때 IP라는 것을 사용한다.

IP(Internet Protocol) 는 인터넷에서 각 기기의 주소 역할을 한다.
우리가 "택배 주소"를 적듯이 데이터를 목적지로 정확히 보내기 위한 시스템이다. IP는 패킷이라는 단위로 데이터를 나눠 보내며 각 패킷은 출발지 IP, 목적지 IP 등의 정보를 가진다.

⚠️ 하지만 IP만으로는 완벽하지 않다.

  • 비연결성: 대상이 없거나 서비스 불능 상태여도 패킷 전송
  • 비신뢰성: 중간에 패킷이 사라지거나 순서가 바뀔 수 있음
  • 프로그램 구분 : 같은 IP를 사용하는 서버에 애플리케이션이 둘 이상일 경우?

🌐 TCP와 UDP

IP의 한계를 보완하기 위해 전송 계층이 존재한다. 대표적으로 TCP와 UDP가 있다.

👉 TCP (신뢰 보장)

  • 3-way 핸드쉐이크로 연결 설정
    • 접속 요청(client) -> 요청 수락, 접속 요청 (server) -> 요청 수락(client)
  • 데이터가 순서대로 도착하는지 확인
  • 손실된 데이터 재전송
  • 대부분의 서비스는 TCP 사용

👉 UDP (빠르지만 비신뢰성)

  • 연결 없이 바로 데이터 전송
  • 순서 보장 X, 손실 보장 X
  • 실시간 게임, 영상 스트리밍에 자주 사용
  • IP에서 + port, 체크섬 정도

🌐 PORT

PORT는 한 서버(IP) 안에서 여러 프로그램을 구분하기 위한 번호이다.

⚠️ IP는 기억하기 어렵고, 변경될 수 있다는 문제점이 존재한다.

🌐 DNS

그래서 우리는 어려운 IP 주소 대신 www.google.com이라는 도메인으로 사용한다.
해당 도메인을 DNS 서버를 통해 200.200.200.2 같은 IP로 바꿔주는 것이 DNS(Domain Name System)이다.


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

🌐 URI

URI : 자원을 식별하는 통합된 개념 (Uniform Resource Identifier)

  • URL : 자원이 어디 있는지 위치를 알려줌 (Locator)
  • URN : 자원의 이름을 알려줌 (Name)
    실제 URN 이름만으로 리소스 찾을 수 있는 방법이 보편화되지 않아 URI = URL 이라고 하자!!

👉 구성 요소
scheme://[userinfo@]host[:port][/path][?query][#fragment]

ex) https://www.google.com:443/search?q=hello&hl=ko

  • scheme
    • 주로 프로토콜 사용
    • https는 http에 보안이 추가된 것
  • userinfo
    • 사용자 정보 포함해서 인증
    • 거의 사용 x
  • host
    • 도메인명 또는 IP주소
  • port
    • 일반적으로 생략 가능, 생략 시 http는 80 / https는 443
  • path
    • 리소스 경로
  • query
    • key=value 형태
    • ?로 시작, &로 추가 가능
    • 쿼리파라미터, 쿼리스트링으로 불림

🌐 웹 브라우저의 요청 흐름

  1. 사용자가 URL을 입력
  2. DNS로 IP 주소를 조회
  3. HTTP 요청 메시지를 생성
  4. TCP/IP로 서버에 전달
    이때 패킷 상태는 아래와 같다.
  1. 응답 메시지를 받고 HTML을 렌더링

3. HTTP

‼️ 모든 것이 HTTP

  • HTTP 메시지에는 HTML, TEXT, IMAGE, 영상, 파, JSON, XML 등 거의 모든 형태의 데이터 전송이 가능하다.
  • HTTP/1.1 을 가장 많이 사용하며 HTTP/2,3은 성능 개선 위주라 결론은 1.1을 제대로 공부하자!
  • HTTP/1.1은 TCP 프로토콜 기반이다.

‼️ 특징

➡️ 클라이언트 서버 구조

➡️ 무상태 프로토콜(stateless)

  • 서버가 클라이언트 상태를 보존하지 X

  • stateful은 중간에 다른 점원으로 바뀌면 상태 정보를 다른 점원에게 미리 알려줘야하지만, stateless는 다른 점원이 바뀌어도 상관이 없다.

  • 이 말은 즉!!
    갑자기 고객이 증가해도 점원을 대거 투입 가능
    = 갑자기 클라이언트 요청이 증가해도 서버 대거 투입 가능
    = 무한한 서버 증설 가능
    = 대용량 트래픽에 유용

  • 상태 유지는 최소한만 사용하도록 하자! But 로그인과 같이 상태를 유지해야하는 경우도 있다.

➡️ 비연결성

  • HTTP는 기본이 연결을 유지하지 X 모델
  • 일반적으로 초 단위 이하의 빠른 속도로 응답하며 최소한의 서버 자원 사용
  • 1시간 동안 수천명의 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 작다.
    • ex) 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지 X, 누르는 경우만 연결!
  • ⚠️ 3 way handshake 시간 추가와 많은 자원이 다운로드 된다는 단점이 있음
  • 💡지속 연결(Persistent Connections)로 문제 해결

‼️ HTTP 메시지

시작라인

  • 요청 : HTTP 메서드 + 요청 대상 + 버전
  • 응답 : 버전 + HTTP 상태 코드

헤더

  • field-name (대소문자 구분 x) : OWS field-value OWS
  • 응답 : HTTP 전송에 필요한 모든 부가 정보
    • ex) 크기, 인증, 압축, 캐시정보 등등

바디

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

0개의 댓글