가능세계
[Network] HTTP란 무엇인가요? 무상태와 비연결성 정리하기 본문
1. HTTP란?
HTTP(HyperText Transfer Protocol)는 클라이언트와 서버가 서로 데이터를 주고받기 위해 사용되는 통신 프로토콜입니다.
클라이언트가 특정 URL에 대한 요청을 보내면 서버는 요청된 데이터를 반환합니다. HTTP 메시지에 그야말로 모든 형태의 데이터(HTML, TEXT, IMAGE, JSON, XML...)를 전송할 수 있습니다.
HTTP는 일반적으로 TCP/IP 통신 위에서 동작하며, 기본 포트는 80번입니다.
이제 HTTP의 통신 구조와 특징들에 대해 살펴봅시다.
2. HTTP의 통신 구조
2-1. 클라이언트-서버 구조로 동작합니다
HTTP는 클라이언트
(Client)와 서버
(Server) 구조로 되어 있습니다.
클라이언트란 요청(request)을 보내는 쪽을 의미하며, 웹 관점에서는 브라우저(크롬, 사파리, 엣지 같은 프로그램)를 말합니다.
서버란 요청에 대한 응답(response)을 보내는 쪽으로, 일반적으로 데이터를 보내주는 원격지의 컴퓨터를 말합니다.
2-2. 클라이언트와 서버를 분리하는 것은 중요합니다
클라이언트와 서버는 개별적인 메시지 교환을 통해 통신합니다. 클라이언트는 서버에 요청을 보내고, 응답을 대기합니다. 그러면 서버는 요청에 대한 결과를 만들어서 응답합니다.
이렇게 클라이언트와 서버를 분리하는 것은 중요합니다.
클라이언트 측에서는 복잡한 비즈니스 로직이나 데이터를 다룰 필요 없이 UI와 사용성에 집중할 수 있고,
서버 측에서는 아키텍처, 트래픽 고도화 등을 고민할 수 있습니다.
즉, 클라이언트와 서버를 분리함으로써 양쪽이 독립적으로 진화할 수 있다는 이점이 있습니다.
3. HTTP 특징 - 무상태(Stateless)
HTTP는 무상태 프로토콜(Stateless)을 지향합니다.
3-1. 무상태란 무엇을 의미하나요?
무상태, 즉 Stateless란, 서버가 클라이언트의 상태를 보존하지 않는 것을 뜻합니다. 다시 말해, 동일한 연결 상에서 전달된 '이전 요청'과 '다음 요청'이 서로 관련이 없다는 의미입니다.
Stateless한 상황을 가정해 봅시다. HTTP 서버는 클라이언트 요청에 대해 아무것도 기억하지 않습니다.
클라이언트A: 피자를 주문하려고 합니다.
서버X: 피자 토핑은 무엇으로 하시겠어요?
클라이언트A: 피자를 주문하려고 합니다. 토핑은 페퍼로니, 피망, 올리브로 해주세요.
서버Y: 주소가 어떻게 되세요?
클라이언트A: 피자를 주문하려고 합니다. 토핑은 페퍼로니, 피망, 올리브로 해주세요. 주소는 윌로우 크릭 165번지입니다.
서버Z: 결제는 어떻게 해드릴까요?
클라이언트A: 피자를 주문하려고 합니다. 토핑은 페퍼로니, 피망, 올리브로 해주세요. 주소는 윌로우 크릭 165번지입니다. 카드 결제하겠습니다.
서버Y: 주문 완료되었습니다.
3-2. 무상태의 장점과 단점을 살펴봅시다
위 대화 내용처럼 서버는 클라이언트의 요청(상태)을 유지하지 않습니다.
서버는 단순히 요청에 해당하는 응답을 보내는 역할만 수행하며, 통신에 필요한 모든 상태 정보는 클라이언트에서 제공하는 것이 무상태 구조입니다.
따라서 클라이언트가 요청 시 필요한 데이터를 추가로 전송해야 한다는 단점이 있습니다.
하지만 무상태는 서버가 바뀌어도 문제없이 요청을 처리할 수 있다는 장점이 있습니다.
예를 들어, 다수의 클라이언트 요청에 서버를 대거 투입할 수 있고, 서버에 에러가 발생해도 응답 서버를 바꿀 수 있어 서버의 수평 확장에 유리합니다.
4. HTTP 특징 - 비연결성(Connectionless)
4-1. 비연결성이란 무엇을 의미하나요?
HTTP는 비연결성
(Connectionless) 프로토콜입니다.
비연결성은 클라이언트 요청에 서버가 응답을 마치면 연결을 종료하는 성질을 말합니다.
각 요청과 응답 간에 연결을 유지하지 않기 때문에 서버 자원의 가용성을 높이고 자원을 효율적으로 사용할 수 있습니다.
4-2. 비연결성에는 한계가 있습니다
그러나 비연결성 방식에는 단점이 있습니다.
연결이 끊긴다는 것은 TCP/IP 연결을 계속해서 새로 맺어야 하며, 그 말인즉슨 3-Way-Handshake 시간이 추가되는 것을 의미합니다.
또한 자원을 하나씩 받을 때마다 연결을 끊고 다시 맺기 때문에 비효율적일 수 있습니다.
지금은 이러한 문제를 HTTP 지속 연결(Persistent Connections)로 해결하게 되었습니다. HTTP/2, HTTP/3에서 더 많은 최적화가 이루어졌습니다.
참고
'Blog > Network' 카테고리의 다른 글
[Network]HTTP Methods란? HTTP 메서드 종류 알아보기 (0) | 2023.09.11 |
---|---|
[Network] HTTP 메시지(HTTP Message) 구조 파헤치기 (0) | 2023.09.10 |
[Network] URI vs URL vs URN 차이점 알아보기 (0) | 2023.09.10 |
[Network] UDP란? TCP vs UDP 차이점 살펴보기 (0) | 2023.09.10 |
[Network] TCP 3-Way Handshake와 4-Way Handshake 이해하기 (0) | 2023.09.10 |