웹 개발

HTTP

Blue_bull 2025. 2. 9. 18:02

📌 HTTP 개념 확실히 정리하기 (초급 개발자를 위한 완벽한 이해)


✅ 1. HTTP란? (핵심 개념)

HTTP(HyperText Transfer Protocol) 은 웹에서 클라이언트(브라우저)와 서버가 데이터를 주고받는 규칙(프로토콜) 이다.
✔ 클라이언트(웹 브라우저)가 요청하면 서버가 응답하는 요청-응답(Request-Response) 방식을 따른다.
✔ HTML, JSON, 이미지, 동영상 등 모든 웹 콘텐츠 전송에 사용됨
무상태 프로토콜(Stateless) → 요청 간에 상태를 유지하지 않음.


✅ 2. HTTP 통신 흐름 (요청 - 응답)

[1] 클라이언트(웹 브라우저)가 URL 요청
      ↓
[2] 서버가 요청을 분석하고 적절한 응답 생성
      ↓
[3] 클라이언트에게 응답 반환 (HTML, JSON, 파일 등)

예제: 브라우저에서 http://example.com 입력 시 동작
1️⃣ 브라우저가 example.comGET 요청 보냄
2️⃣ 서버가 요청을 받아 HTML 페이지를 생성
3️⃣ 서버가 HTML을 응답으로 브라우저에게 보냄
4️⃣ 브라우저가 HTML을 해석하여 화면에 표시


✅ 3. HTTP 요청(Request) 구조

클라이언트(브라우저, 앱 등)가 서버에 데이터를 요청하는 방식

📌 HTTP 요청의 기본 구조

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
구성 요소 설명
HTTP 메서드 GET, POST, PUT, DELETE 등
URL 요청하는 웹 주소 (ex: /index.html)
HTTP 버전 HTTP/1.1, HTTP/2, HTTP/3
헤더(Header) 요청 정보 (Host, User-Agent, Accept 등)
바디(Body) (POST, PUT 요청 시) 전송할 데이터

📌 주요 HTTP 요청 메서드

메서드 설명 예제
GET 데이터를 요청 (조회) GET /products
POST 데이터를 전송 (새 데이터 생성) POST /register
PUT 기존 데이터를 수정 PUT /user/1
DELETE 데이터를 삭제 DELETE /user/1

GET은 URL에 데이터를 담아 보내고, POST는 요청 본문(Body)에 담아 보냄
PUT과 DELETE는 RESTful API에서 많이 사용됨


✅ 4. HTTP 응답(Response) 구조

서버가 클라이언트 요청에 대해 보내는 응답

📌 HTTP 응답의 기본 구조

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

<html>
    <body>Hello, world!</body>
</html>
구성 요소 설명
HTTP 상태 코드 200, 404, 500 등 응답 결과
헤더(Header) 응답 정보 (Content-Type, Content-Length)
바디(Body) HTML, JSON, 파일 등 실제 응답 데이터

📌 주요 HTTP 상태 코드

코드 의미 설명
200 OK 성공 요청이 정상적으로 처리됨
301 Moved Permanently 리다이렉트 요청한 리소스가 영구적으로 이동됨
302 Found 리다이렉트 요청한 리소스가 일시적으로 이동됨
400 Bad Request 클라이언트 오류 잘못된 요청 (잘못된 문법)
401 Unauthorized 인증 필요 로그인 필요 (비밀번호 입력해야 함)
403 Forbidden 접근 금지 권한 없음
404 Not Found 찾을 수 없음 요청한 리소스가 없음
500 Internal Server Error 서버 오류 서버 내부 문제 발생

200대는 성공 응답, 300대는 리다이렉트, 400대는 클라이언트 오류, 500대는 서버 오류


✅ 5. HTTP의 특징

1) 무상태(Stateless)
→ 서버가 요청을 기억하지 않음 (매 요청이 독립적)
→ 로그인, 장바구니 등을 위해 세션(Session)과 쿠키(Cookie) 사용

2) 연결less(Connectionless)
→ 요청 후 응답을 받으면 연결 종료 (계속 유지되지 않음)

3) 확장성(Scalability)
→ HTTP는 텍스트 기반이므로 쉽게 확장 가능 (JSON, XML, HTML, 파일 등 다양한 데이터 전송 가능)


✅ 6. HTTP와 HTTPS 차이

HTTP(비보안) vs HTTPS(보안 적용)

비교 항목 HTTP HTTPS
보안 암호화 없음 (평문 전송) SSL/TLS 암호화 적용
포트 80 443
데이터 보호 취약 안전
사용 예 일반 사이트 로그인, 결제, 보안 필요 서비스

✔ HTTPS는 SSL/TLS 암호화를 통해 데이터가 안전하게 전송됨
✔ 요즘 대부분의 사이트는 HTTPS 필수 적용


✅ 7. HTTP와 REST API

REST(Representational State Transfer) API는 HTTP를 기반으로 한 웹 API 설계 원칙
✔ HTTP 요청 메서드를 활용하여 클라이언트-서버 간 데이터를 주고받음

REST API 설계 HTTP 메서드 예제
리소스 조회 GET GET /users
새 리소스 생성 POST POST /users
리소스 수정 PUT PUT /users/1
리소스 삭제 DELETE DELETE /users/1

✔ JSON 형식 응답이 일반적 (Content-Type: application/json)
✔ RESTful API는 서버와 클라이언트가 독립적으로 동작할 수 있게 해줌


✅ 8. HTTP 요약

HTTP는 클라이언트와 서버 간 데이터 전송을 위한 프로토콜
요청(Request)과 응답(Response) 구조를 가짐
GET, POST, PUT, DELETE 등의 메서드 사용
200(성공), 404(없음), 500(서버 오류) 등의 상태 코드 반환
보안을 위해 HTTPS(SSL/TLS) 사용 필수
REST API는 HTTP 기반의 데이터 교환 방식


🎯 결론 (이제 HTTP 완벽 정리 끝!)

HTTP는 요청-응답 방식의 프로토콜이며, 웹의 기본 통신 규칙
GET, POST 등 HTTP 메서드와 상태 코드(200, 404 등)를 이해하면 웹 개발에 필수
HTTPS를 통해 보안 강화, REST API로 데이터를 주고받는 방식도 익혀야 함

📌 HTTP의 내부 동작을 완벽하게 이해하기 위한 부가 설명

HTTP는 단순한 요청-응답 방식처럼 보이지만, 내부적으로는 여러 단계가 동작해.
HTTP가 어떻게 동작하는지 깊이 이해할 수 있도록, 세부적인 동작 과정과 기술적 개념을 자세히 설명해 줄게.


✅ 1. HTTP의 동작 흐름 (세부 과정)

HTTP 요청이 실제로 어떻게 동작하는지 단계별로 살펴보자.

📌 1️⃣ 클라이언트가 요청(Request)을 보냄

클라이언트(브라우저, 모바일 앱 등)는 HTTP 요청을 서버로 보낸다.
이때 요청은 다음과 같은 정보를 포함한다.

예제 요청 (브라우저에서 http://example.com/index.html 입력 시)

GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html

📌 2️⃣ DNS 조회 (도메인을 IP 주소로 변환)

클라이언트는 example.com 같은 도메인 이름을 실제 서버의 IP 주소로 변환해야 한다.
이 과정에서 DNS(Domain Name System) 서버가 동작한다.

DNS 조회 과정

1️⃣ 브라우저는 캐시에서 해당 도메인의 IP 주소를 찾음 (없으면 DNS 서버에 요청)
2️⃣ DNS 서버는 `example.com`의 실제 IP 주소 (`192.168.1.10` 등)를 반환
3️⃣ 클라이언트는 변환된 IP 주소로 HTTP 요청을 보냄

즉, DNS는 도메인을 사람이 읽을 수 있는 형태(example.com)에서 IP 주소(192.168.1.10)로 변환하는 역할!


📌 3️⃣ TCP 연결 및 3-Way Handshake (HTTP는 TCP 위에서 동작)

HTTP는 기본적으로 TCP(전송 제어 프로토콜) 위에서 동작한다.
✔ HTTP 요청을 보내기 전에, 클라이언트와 서버는 TCP 3-Way Handshake(핸드셰이크) 를 수행한다.

TCP 3-Way Handshake 과정

1️⃣ 클라이언트 → 서버: SYN (연결 요청)
2️⃣ 서버 → 클라이언트: SYN + ACK (요청 승인)
3️⃣ 클라이언트 → 서버: ACK (승인 확인)
4️⃣ 연결 완료 → HTTP 요청 전송

이 과정이 완료되면 HTTP 요청을 보낼 준비가 완료됨
HTTPS의 경우 이 과정에서 SSL/TLS 암호화 추가됨 (SSL Handshake 수행)


📌 4️⃣ HTTP 요청이 서버로 전송됨

✔ 클라이언트는 TCP 연결이 완료되면 HTTP 요청을 서버로 전송한다.
✔ 요청 데이터는 요청 라인(Request Line), 헤더(Header), 바디(Body) 로 구성됨.

예제 요청 (GET /index.html)

GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html

GET 요청이므로 요청 본문(Body)은 없음
POST 요청이라면 Body에 데이터가 포함됨 (ex: 로그인 정보 등)


📌 5️⃣ 서버에서 요청을 처리

✔ 서버는 HTTP 요청을 받은 후, 요청된 리소스를 찾거나 비즈니스 로직을 실행한다.
웹 서버(Apache, Nginx) 가 요청을 받아 웹 애플리케이션(Tomcat, Spring 등) 으로 전달할 수도 있다.

서버 내부 동작 과정

1️⃣ 웹 서버(Apache, Nginx)가 요청을 받음
2️⃣ 정적 페이지라면 (ex: HTML, CSS, 이미지) 바로 응답
3️⃣ 동적 요청이라면 (ex: 로그인 처리, 데이터 조회) WAS(Tomcat, Spring 등)로 전달
4️⃣ 데이터베이스 연동이 필요하면 DB에서 데이터 조회
5️⃣ 처리 완료 후 HTTP 응답 생성

즉, 요청을 받아서 어떤 처리를 할지 결정하는 과정이 포함됨!


📌 6️⃣ HTTP 응답(Response) 생성 및 전송

서버는 요청을 처리한 후, 클라이언트에게 HTTP 응답을 보낸다.

예제 응답 (200 OK - 정상 응답)

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

<html>
    <body>Hello, world!</body>
</html>

서버가 응답할 때 포함되는 주요 정보
| 항목 | 설명 |
|------|------------------------|
| 상태 코드 (200 OK, 404 Not Found 등) | 요청 처리 결과 |
| 헤더(Header) | Content-Type, Set-Cookie, Cache-Control 등 추가 정보 |
| 본문(Body) | 실제 응답 데이터 (HTML, JSON 등) |

POST 요청이라면, 서버가 데이터 저장 후 201 Created 응답을 보낼 수도 있음.


📌 7️⃣ TCP 연결 종료 (4-Way Handshake)

✔ 응답이 완료되면 클라이언트와 서버는 TCP 연결을 종료한다.
TCP 4-Way Handshake(연결 해제 과정)

1️⃣ 클라이언트 → 서버: FIN (연결 종료 요청)
2️⃣ 서버 → 클라이언트: ACK (요청 확인)
3️⃣ 서버 → 클라이언트: FIN (서버도 종료 요청)
4️⃣ 클라이언트 → 서버: ACK (서버의 종료 요청 확인)
5️⃣ 연결 종료

HTTP/1.1에서는 기본적으로 Keep-Alive가 활성화되어 있어, 여러 요청을 하나의 연결에서 유지 가능함


✅ 2. HTTP 동작 과정 요약

HTTP 요청이 동작하는 과정을 순서대로 정리하면 다음과 같아!

1️⃣ 클라이언트가 URL 요청 (ex: `http://example.com/index.html`)
2️⃣ DNS를 통해 도메인 → IP 주소 변환
3️⃣ TCP 3-Way Handshake를 통해 서버와 연결
4️⃣ 클라이언트가 HTTP 요청을 서버로 전송
5️⃣ 서버가 요청을 처리 (정적 페이지 or 동적 데이터 처리)
6️⃣ 서버가 HTTP 응답을 클라이언트에게 전송
7️⃣ TCP 4-Way Handshake로 연결 종료 (or Keep-Alive 유지)

즉, HTTP는 단순히 요청-응답만 있는 것이 아니라, DNS 조회, TCP 연결, SSL 암호화, 웹 서버 처리 등 여러 과정이 포함됨!


✅ 3. HTTP 내부 동작과 관련된 추가 개념

HTTP/1.1 vs HTTP/2 vs HTTP/3 차이점
| 버전 | 주요 특징 |
|------|--------------------------|
| HTTP/1.1 | 기본적인 요청-응답 구조 (Keep-Alive 지원) |
| HTTP/2 | 멀티플렉싱(여러 요청을 동시에 보냄), 속도 개선 |
| HTTP/3 | QUIC 프로토콜 사용 (TCP 대신 UDP 기반) |

HTTP와 HTTPS의 차이 (SSL/TLS 적용)

  • HTTPS는 SSL/TLS 암호화를 적용하여 보안 강화
  • HTTPS는 HTTP 요청 전에 SSL Handshake 과정 추가됨
  • HTTPS는 HTTP보다 느릴 수 있지만, 보안이 강화됨

🎯 결론 (HTTP 내부 동작 완벽 정리)

✔ HTTP는 요청-응답 방식의 프로토콜이지만, 내부적으로 DNS 조회, TCP 연결, SSL 암호화, 서버 처리, 응답 반환 과정이 포함됨.
✔ TCP 3-Way Handshake를 통해 연결 후 HTTP 요청을 처리하고, 응답 후 TCP 연결을 종료.
✔ HTTP/2, HTTP/3은 속도를 개선하고 보안성을 강화한 최신 버전.

'웹 개발' 카테고리의 다른 글

JSON 매핑  (0) 2025.02.09
JSP 스코프  (0) 2025.02.09
HTML 구조이해1 - DOM(Document Object Model)이란?  (0) 2025.02.09
파라미터란?  (0) 2025.02.08
보안 차원에서 주소(URL)의 파라미터를 가리는 이유와 방법  (0) 2025.02.08