HTTP란?
HTTP(Hypertext Transfer Protocol)는 웹에서 데이터를 주고받기 위한 프로토콜입니다. 클라이언트(예: 웹 브라우저)가 서버에 요청을 보내고, 서버는 클라이언트에게 응답을 보냄으로써 웹 페이지, 이미지, 동영상 등을 전송하는 구조입니다. HTTP는 비상태적(stateless)이며, 연결이 끊어진 후에는 서버가 클라이언트의 이전 상태를 기억하지 못한다는 특징이 있습니다. 이를 보완하기 위해 세션이나 쿠키 같은 기술이 사용됩니다.
HTTP의 주요 특징
- 비상태성 (Stateless):
- HTTP는 비상태적이기 때문에, 각 요청은 독립적입니다. 서버는 이전 요청이나 응답에 대한 상태를 기억하지 않습니다. 클라이언트가 같은 웹사이트에 재접속할 때도 서버는 클라이언트의 이전 상태를 인식하지 못합니다.
- 이 때문에 로그인 상태 유지 같은 기능을 위해 쿠키나 세션 관리가 필요합니다.
- 리퀘스트와 리스폰스 구조:
- 리퀘스트(Request): 클라이언트가 서버에 보내는 요청입니다. 여기에는 메서드(GET, POST, PUT, DELETE 등), URL, 헤더 정보 등이 포함됩니다.
- 리스폰스(Response): 서버가 클라이언트에 보내는 응답입니다. 응답 코드(200, 404 등), 헤더, 바디에 콘텐츠가 포함됩니다.
- HTTP 메서드:
- GET: 서버에서 데이터를 가져옵니다.
- POST: 서버에 데이터를 제출하고 처리 요청을 합니다.
- PUT: 서버에 리소스를 업로드하거나 수정합니다.
- DELETE: 서버에서 리소스를 삭제합니다.
- HTTP 상태 코드:
- 1xx (정보): 요청이 수신되었으며 처리 중임을 나타냅니다.
- 2xx (성공): 요청이 성공적으로 처리되었습니다.
- 3xx (리다이렉션): 요청된 리소스가 이동되었으며, 클라이언트가 다른 URL을 통해 접근해야 함을 나타냅니다.
- 4xx (클라이언트 오류): 클라이언트의 요청에 오류가 있음을 나타냅니다 (예: 404 Not Found).
- 5xx (서버 오류): 서버에서 요청을 처리하는 중 오류가 발생했음을 나타냅니다 (예: 500 Internal Server Error).
- 비보안성:
- HTTP는 데이터를 암호화하지 않으므로, 네트워크 중간에서 데이터를 쉽게 가로챌 수 있습니다. 이를 보완하기 위해 HTTPS(SSL/TLS를 통한 HTTP)가 사용됩니다. HTTPS는 데이터를 암호화하여 보안을 강화합니다.
HTTP 요청과 응답의 구조
- HTTP 요청: 클라이언트가 서버에 보내는 데이터
- 메서드: HTTP 요청의 타입(GET, POST 등)
- URL: 요청하는 리소스의 주소
- 헤더: 요청에 대한 추가 정보를 담고 있는 키-값 쌍
- 바디: 요청의 본문 (POST 같은 경우에 사용)
- HTTP 응답: 서버가 클라이언트에게 보내는 데이터
- 상태 코드: 요청에 대한 응답 상태 (200 OK, 404 Not Found 등)
- 헤더: 응답에 대한 추가 정보 (콘텐츠 타입, 쿠키 등)
- 바디: 응답의 실제 데이터 (HTML, JSON 등)
HTTP의 동작 원리
- 클라이언트가 요청을 보냄: 사용자가 브라우저에 URL을 입력하면 브라우저는 서버에 요청을 보냅니다. 이 요청에는 사용자의 브라우저 정보, 세션 쿠키 등의 정보가 포함될 수 있습니다.
- 서버가 요청을 처리함: 서버는 클라이언트가 요청한 리소스를 찾고, 그에 맞는 응답을 생성합니다.
- 서버가 응답을 보냄: 서버는 요청에 대한 응답을 클라이언트에게 전달합니다. 성공적으로 처리된 경우, 웹페이지나 데이터가 포함된 응답이 전송됩니다.
- 클라이언트가 응답을 받음: 클라이언트는 서버로부터 받은 데이터를 브라우저에 렌더링하여 사용자에게 표시합니다.
HTTP의 보안 문제와 HTTPS의 필요성
HTTP는 데이터를 암호화하지 않기 때문에 민감한 정보(로그인 정보, 결제 정보 등)가 노출될 위험이 큽니다. HTTPS는 이러한 데이터를 보호하기 위해 SSL/TLS 프로토콜을 사용하여 데이터를 암호화합니다. 이로 인해 클라이언트와 서버 간의 통신을 안전하게 유지할 수 있으며, 데이터를 도청하거나 중간에 변조하는 것을 방지할 수 있습니다.
https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
'Backend Programming' 카테고리의 다른 글
JPA 영속성 컨텍스트 (3) | 2024.11.01 |
---|---|
빈은 어떻게 관리되어서 응답을 하는가? (1) | 2024.10.20 |
인터넷의 작동 원리 (0) | 2024.10.04 |
HTTPS에 대해서 (0) | 2024.09.29 |
JWT을 사용하여 로그인 서비스 만들기 (2) | 2024.09.22 |