[Network] - HTTP의 기초 이해

2026. 3. 30. 09:10·Network

HTTP(HyperText Transfer Protocol)

💡HTTP는 클라이언트와 서버가 데이터를 주고받기 위한 통신 규약입니다.

현재 HTTP는 단순한 HTML뿐만 아니라 이미지, 영상, 파일, API 데이터(JSON, XML) 등 거의 모든 데이터를 전송할 수 있습니다. 즉, 인터넷에서 주고받는 대부분의 데이터는 HTTP를 사용합니다.

 

심지어 브라우저와 서버뿐만 아니라 서버와 서버끼리의 통신에서도 많이 사용되며, 일반적인 웹 서비스는 HTTP 기반으로 동작합니다. 이론적으로는 TCP를 직접 사용할 수도 있지만, 특수한 경우가 아닌 이상 직접 사용하지는 않습니다.

✔️HTTP는 혼자 동작하는 것이 아닌 하위 프로토콜 위에서 동작합니다.
     ↳HTTP/1.1, HTTP/2 -> TCP기반, HTTP/3 -> UDP 기반

HTTP 특징

1. 클라이언트 - 서버 구조(Request - Response 구조)

💡HTTP는 항상 요청과 응답으로 동작하며, 클라이언트와 서버가 나뉘어져있다는 것이 중요
    ↳ 과거에는 클라이언트와 서버가 분리되어있지 않았음.
 ✔️HTTP 동작 흐름 
  -  클라이언트가 HTTP 메세지를 통해서 서버에 요청
  -  클라이언트는 서버 응답 올떄까지 대기
  -  서버 응답

역할 분리의 장점

✔️ 클라이언트 - 화면(UI), 사용자 경험(UX) 담당
✔️ 서버 - 비즈니스 로직, 데이터 처리, 핵심 기능 담당
장점 설명
독립적인 개발 가능 클라이언트 / 서버 따로 개발 가능
유지보수 용이 UI 변경 -> 서버 영향 x
서버 로직 변경 -> UI 영향 최소
문제 발생시 대처 용이 서버 트래픽 초과시 서버만 확장하면 됨
🎈클라이언트 서버는 화면에 보여지는 역할을, 서버는 주요 로직 및 데이터를 처리하는 역할을 담당함으로써, 각각 자신의 역할에만 집중할 수 있게 함

2. 무상태 프로토콜(Stateless)

💡무상태란 서버가 클라이언트의 이전 상태를 기억하지 않는 방식이며, HTTP는 기본적으로 무상태 프로토콜을 지향함.
      ↳ 요청이 올 때마다 이전 요청과 완전히 독립적으로 처리
✔️ 특징 : 요청마다 필요한 정보 포함 -> 서버가 기억할 필요 없음
✔️ 장점 : 어떤 서버가 처리해도 상관없음 - 서버 증설 가능, 서버 장애에도 대응 가능(수평 확장 가능)

예시

고객: 노트북 가격 얼마에요?
점원 A: 100만 원입니다.

고객: 노트북 2개 구매할게요
점원 B: 어떤 거로 결제하시겠어요?

고객: 노트북 2개 카드로 결제할게요
점원 C: 결제 완료
✔️ 요청마다 필요한 정보 포함 -> 서버가 기억할 필요 x
✔️ 어느 직원이 처리해도 업무 유지 가능(장애 대응 및 서버 증설 가능)

 

장점

구분 설명 예시
서버 확장 용이
(스케일 아웃)
요청이 들어오면 아무 서버나 처리 가능
 *서버를 쉽게 증설 가능(구조)
클라우드 서버 증설 시 자동 분산
장애 대응 특정 서버가 죽어도 다른 서버로 바로 처리 가능 서버 1 장애 발생 -> 서버 2 대신 처리
대규모 트래픽 처리 여러 서버가 동시에 요청을 나눠 처리 가능
(실제 상황에 대한 성능)
1만명 동시 요청 -> 서버 100대가 나눠 처리

단점

✔️ 요청마다 모든 정보를 보내야 하므로, 데이터의 양이 비교적 많아짐
✔️ 모든 기능을 무상태로 만들 수 없는 경우가 있음(로그인 상태, 쇼핑 카트 등)
     ↳ Stateful이 필요한 경우 쿠키 및 세션, 토큰 등으로 해결하며 사용을 최소화하는 것이 중요

Stateful(상태 유지)

💡Stateful이란 서버가 클라이언트의 상태(이전 요청 정보)를 기억하고 유지하는 방식
     ex) 로그인 정보 및 장바구니 등

예시 

고객: 노트북 가격 얼마예요?
점원 A: 100만 원입니다.

고객: 2개 구매할게요
점원 B:??? (어떤 제품을 구매하는지, 이전 상황 모름)

고객: 카드로 결제할게요
점원 C:??? (어떤 제품을 몇 개 구매하는지, 이전 상황 모름)
✔️ 세션 공유 필요
      ↳  요청을 처리하려면 서버가 이전 상태를 기억해야 함 

✔️ 특정 서버로만 요청 전달 해야 함
      ↳ 점원이 바뀌면 업무를 처음부터 다시 해야 함(장애 발생 시 대처 및 서버 확장 어려움)

장점

구분 설명
요청이 간단 함 로그인 한 번 요청 하면 이후 요청엔 정보 안보내도 됨.
복잡한 흐름 처리에 유리 상태가 있어야 자연스러운 서비스에 적합(로그인, 장바구니, 결제과정 등)

단점

✔️ 서버 확장 어려움
✔️ 장애에 취약
✔️ 서버 부담 증가(사용자 상태 계속 저장 -> 메모리 사용 증가)

 

Stateless vs Stateful 정리

구분 Stateful(상태 유지) Stateless(무상태)
상태 기억 서버가 클라이언트 상태를 보존 서버는 상태를 저장하지 않음
요청 간 연결 요청 간 연속성 유지 필요 요청마다 독립적 처리
서버 부담 큼 작음
확장성 낮음 높음
장애 대응 서버 장애 시 정보 손실 서버 장애에도 무관, 다른 서버 처리 가능

3, 비연결성(connectionless)

💡비연결성이란 요청과 응답이 끝나면 연결을 바로 끊는 방식입니다.

동작 흐름

✔️ 요청 -> 응답 -> 연결 종료
      ↳ 필요할 때만 연결

장점

구분 설명 핵심
서버 자원 절약 요청이 있을때만 연결 후 바로 끊음 불필요한 연결 유지 x
대규모 트래픽 처리 동시에 많은 사용자의 요청 처리 가능
(1시간 동안 1000명 접속, 실제 동시 요청은 몇 십개)
서버가 연결에 묶이지 않음
효율적인 서버 운영 자원을 필요한 순간에만 사용 서버 활용도 극대화

단점

구분 설명 핵심
성능 저하(지연 증가) 요청때마다 TCP/IP 새로 연결 필요
-> 3 way handshake 시간 추가
요청과 연결 생성 비례
ex) 요청 100개 = 100번 연결
웹 페이지 로딩시 비효율 웹 페이지 하나에는 HTML, CSS, JS, 이미지 등 수 많은 자원 존재
-> 수십 개의 동시 요청 발생
요청마다 수 많은 자원의 생성과 종료를 반복 -> 속도 저하
상태 유지 어려움 이전 상태 정보가 없어 로그인, 장바구니 등 구현 어려움 이전 상태 정보 기억x

 

연결 유지 모델

✔️ 클라이언트와 서버가 계속 연결을 유지
      ↳ 요청이 없어도 계속 연결을 유지해 지속적인 서버 사용 -> 서버 메모리, 연결 자원 낭비


HTTP 지속 연결(Persistent Connection)

기존의 비연결성을 그대로 사용하기에는 속도 저하 및 서버/네트워크 부담 증가의 문제가 발생해 이를 해결하기 위한 방식입니다.

💡한 번 맺은 연결을 바로 끊지 않고, 일정 시간 유지하면서 여러 요청을 처리하는 방식

동작 방식

✔️ 클라이언트 -> 서버 연결(1번만 연결)
✔️ 요청 여러 개 처리(HTML, CSS, JS, 이미지 등)
✔️ 일정 시간 후 연결 종료

장점

기존의 비연결성이 요청에 비례해 연결을 했다면, 지속 연결은 여러 개의 요청이 와도 1번만 연결합니다.

✔️ 성능 향상 - 연결 생성 횟수 감소, 응답 속도 증가
✔️ 네트워크 비용 절감 - handshake 횟수 감소
✔️ 사용자 경험 개선 - 페이지 로딩 속도 향상

정리

🎈 HTTP 지속 연결은 매 요청마다 연결을 새로 생성하는 비연결성의 단점을 보완하기 위해,
     하나의 연결을 일정 시간 유지하며 여러 요청을 처리하는 방식이다.(웬만한 HTML 하나 다 받을 때까지는 유지)

HTTP 메시지

💡 HTTP 메시지란 클라이언트와 서버가 서로 주고받는 데이터 형식(약속된 구조)입니다.
     ↳ 요청 / 응답 모두 정해진 형식에 맞춤

 

HTTP 메시지 전체 구조


요청 메시지(Request) 예시

GET /members? id=100 HTTP/1.1
Host: www.example.com
User-Agent: Chrome

(빈 줄)
(바디 - Hello) *보통 없음

시작 라인(start-line)

✔️ GET /members? id=100 HTTP/1.1
     [메서드] [경로] [HTTP 버전]
구조 메세지 역할
메서드
(method)
GET 서버에게 뭘 할지 알려줌
경로
(request-target)
/members?id=100
*/members -> 회원 목록, ?id=100 -> 조건(쿼리)
서버에서 어떤 데이터를 요청하는지 알려줌
HTTP 버전 HTTP/1.1 어떤 규칙으로 통신하는지 알려줌

메서드 종류(method)

메서드 의미
GET 데이터 조회
POST 데이터 생성
PUT 데이터 수정
DELETE 데이터 삭제

 

헤더(Header)

💡헤더(Header)는 이 요청에 대한 추가 설명을 의미합니다.
✔️Host: www.example.com
     User-Agent: Chrome
헤더 의미
Host 요청 서버 주소
User-Agent 브라우저 정보
Content-Type 데이터 타입
Authorization 인증 정보
🎈쉽게 말하자면 택배 상자에 붙은 스티커로 보내는 사람, 내용물 종류, 크기를 알려줍니다.

빈 줄

💡컴퓨터는 헤더와 바디를 구별하지 못하기에, 헤더와 바디의 구간을 알려주는 구분선입니다.

바디(Body)

💡Body는 실제 데이터를 의미하며, HTML, JSON, 이미지, 파일 등 모든 데이터를 처리할 수 있습니다.
     ↳ 실제 데이터를 담지만 모든 요청이 데이터를 보내지는 않기에 모든 요청이 필요하지 않고 보통 없음.
✔️ HTML
<html>
    <body> Hello </body>
</html>

응답 메시지(Response) 예시

HTTP/1.1 200 OK
Content-Type: text/html

(빈 줄)

<html>
     <body> Hello </body>
</html>

시작 라인(status-line)

✔️ HTP/1.1 200 OK
    [버전] [상태코드] [설명]

상태 코드

코드 의미
200 성공
400 요청 오류
500 서버 오류

설명(이유 문구, reason-phrase)

💡 사람이 이해하기 쉽게 짧게 상태를 설명합니다.
      ↳ ex) OK

정리

🎈 응답 메시지는 "요청 처리 결과" + 상태 코드 + 데이터(바디)의 구조로 전달합니다.

HTTP 메시지 구조의 장점

💡HTTP는 겉으로 보면 복잡해 보이지만 내부 구조는 매우 단순합니다.
     ↳ 실제 내부 구조(시작라인, 헤더, 빈 줄, 바디)
장점 설명 예시
고정된 구조 [시작라인 + 헤더 + 바디] 새로운 기능이 나와도 구조는 바뀌지 않음
확장성 헤더로 기능 무한 확장 가능  Content-Type : json
Authorization : token
누구나 쉽게 구현 가능 문자열만 만들어도 HTTP 가능 <html>
       <body> hello </body>
</html>
🎈 HTTP는 기능이 많아 복잡해 보이지만, 실제 구조는 단순하며 헤더를 통해 기능을 확장할 수 있도록 설계된 프로토콜

'Network' 카테고리의 다른 글

[Network] - HTTP 상태코드 정리  (0) 2026.04.03
[Network] - HTTP 메서드 활용과 API 설계  (0) 2026.04.02
[Network] - HTTP 메서드와 HTTP API 설계  (1) 2026.04.01
[Network] - URI의 이해  (0) 2026.03.27
[Network] 인터넷 네트워크의 기초 이해 - IP와 TCP,UDP  (0) 2026.03.25
'Network' 카테고리의 다른 글
  • [Network] - HTTP 메서드 활용과 API 설계
  • [Network] - HTTP 메서드와 HTTP API 설계
  • [Network] - URI의 이해
  • [Network] 인터넷 네트워크의 기초 이해 - IP와 TCP,UDP
mins0on
mins0on
비전공자의 백엔드 개발자 공부 기록 일지입니다.
  • mins0on
    꾸준함의 가치
    mins0on
  • 전체
    오늘
    어제
    • 분류 전체보기 (66) N
      • Java (7)
      • Spring (9)
      • DataBase (1)
      • Algorithm (1)
      • Network (6)
      • 운영체제 (2)
      • 코드 분석 (26)
      • Trouble Shooting (5) N
      • Project (1)
      • Migration (3)
      • 기타 (1)
      • 개념 정리 (3)
      • Coding Test (1)
        • Baekjoon (1)
  • hELLO· Designed By정상우.v4.10.6
mins0on
[Network] - HTTP의 기초 이해
상단으로

티스토리툴바