본 게시물은 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 보고 작성하였습니다.
HTTP (HyperText Transfer Protocol)
HTTP는 클라이언트(브라우저)와 서버 간에 데이터를 주고받기 위한 프로토콜입니다.
HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML (API) 등 거의 모든 형태의 데이터를 전송 가능합니다.
심지어 서버간에 데이터를 주고 받을 때도 대부분 HTTP를 사용합니다.
HTTP 특징
- 클라이언트 서버 구조
- 무상태 프로토콜(stateless), 비연결성(Connectionless)
- HTTP 메시지
- 단순함, 확장 가능
1. 클라이언트 서버 구조
HTTP는 Request Response 구조로 되어 있습니다.
클라이언트는 서버에 요청을 보내고, 응답을 대기하며
서버는 요청에 대한 결과를 만들어서 응답하는 구조로 동작합니다.
2-1. 무상태 Stateless
일단, HTTP는 Stateless(무상태)의 특징을 가집니다. 서버가 클라이언트 상태를 보존하지 않습니다. 서버 확장성이 높다(스케일 아웃)는 장점이 있지만, 클라이언트가 추가 데이터를 전송해야 하는 단점이 있습니다.
상태 유지와 무상태의 차이를 파악하기 위해 예시를 들어보겠습니다.
어떤 차이가 있는지 이해가 되시나요?
상태 유지는 중간에 다른 점원으로 바뀌면 안됩니다. 만약, 중간에 다른 점원으로 바뀌면, 상태 정보를 다른 점원에게 매번 알려줘야 합니다. 항상 같은 서버를 유지해야 하고, 중간에 서버가 장애가 나면 클라이언트는 요청을 다시 해야 합니다.
무상태는 중간에 다른 점원으로 바뀌어도 됩니다. 애초에 클라이언트가 요청을 할 때부터 필요한 데이터를 담아서 요청하기 때문입니다. 이는, 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다는 뜻이 됩니다. 즉, 무상태는 응답 서버를 쉽게 바꿀 수 있으므로 무한한 서버 증설이 가능합니다.
하지만, HTTP는 무상태의 특징을 가진다고 해도 모든 것을 무상태로 설계할 수는 없습니다. 예를 들어 로그인의 경우 로그인 했다는 상태를 서버에 유지해야 합니다. 이처럼 웹 애플리케이션을 설계할 때는 최대한 무상태로 설계하고, 어쩔 수 없는 경우에는 상태 유지를 최소한으로 사용합니다.
2-2. 비 연결성 Connectionless
HTTP는 기본이 연결을 유지하지 않는 모델입니다. 일반적으로 초 단위 이하의 빠른 속도로 응답하고, 요청 후 응답을 받으면 연결을 종료합니다. 이는, 서버 자원을 매우 효율적으로 사용할 수 있습니다.
하지만, 자원을 받을 때마다 하나하나 연결하고 끊고 연결하고 반복하면 너무 비효율적이기 때문에 HTTP는 기본적으로 지속 연결(Persistent Connections)을 기본적으로 사용합니다.
3. HTTP 메시지
HTTP는 요청과 응답 메시지의 구조가 약간 다릅니다.
기본적으로 시작 라인, 헤더, 공백(필수), 메시지 바디 구조로 이루어져 있습니다.
<시작 라인 - 요청 메시지>
GET /search?q=hello&hl=ko HTTP/1.1
- HTTP 메서드 (서버가 수행해야 할 동작 지정, GET, POST, PUT, DELETE 등)
- 요청 대상 (절대 경로="/"로 시작하는 경로)
- HTTP 버전
<시작 라인 - 응답 메시지>
HTTP/1.1 200 OK
- HTTP 버전
- HTTP 상태 코드 (요청 성공, 실패를 나타냄)
- 200: 성공
- 400: 클라이언트 요청 오류
- 500: 서버 내부 오류
- 이유 문구 (사람이 이해할 수 있는 짧은 상태 코드 설명 글)
<헤더>
- field-name: field-value 형태
- HTTP 전송에 필요한 모든 부가정보
- 예) 메시지 바디의 내용, 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보, 서버 애플리케이션 정보, 캐시 관리 정보 등등..
<메시지 바디>
- 실제 전송할 데이터
- HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능
end
이번 글에서는 HTTP의 기본 개념과 특징(무상태, 비연결성), 그리고 HTTP 메시지 구조에 대해 정리해보았습니다. 웹에서 데이터를 주고받는 과정이 어떻게 이루어지는지 한층 더 명확하게 이해할 수 있었습니다. 다음 글에서는 HTTP 메서드(GET, POST 등)와 상태 코드(200, 400, 500 등)에 대해 자세히 알아볼 예정입니다. 웹 개발을 하면서 자주 접하는 부분이라 더욱 기대되네요.
'공부 메모' 카테고리의 다른 글
[HTTP] 데이터 전송 방식과 API 설계 활용 (2) | 2025.04.09 |
---|---|
[HTTP] HTTP 메서드 총정리: API 설계를 위한 필수 개념 (1) | 2025.04.04 |
[HTTP] URI/URL/URN? 웹 브라우저 요청 흐름 정리 (3) | 2025.03.29 |
[HTTP] 네트워크 필수 개념 정리 (IP/TCP/UDP/PORT/DNS) (1) | 2025.03.28 |
유튜브 URL로 댓글 목록 크롤링하기 (0) | 2025.03.18 |