[네트워크]HTTP 프로토콜과 통신 유형
웹 애플리케이션에서 클라이언트와 서버 간의 데이터 전송은 다양한 형식으로 이루어진다. HTTP 데이터 전송 형식, 서버의 요청 처리 방식에 대해 알아보자!
Aug 19, 2024
웹 애플리케이션에서 클라이언트와 서버 간의 데이터 전송은 다양한 형식으로 이루어진다. HTTP 데이터 전송 형식, 서버의 요청 처리 방식에 대해 알아보자!
1. HTTP 데이터 전송 형식
HTTP 를 통해 데이터를 전송할 때, 일반적으로 두 가지 형식을 사용한다.
1.1 쿼리 문자열 (Query String)
title = 제목1 & content = 내용1
형태로 데이터를 전송한다.1.2 JSON 형식
{ "title" : "제목1" , "content : 내용1 "}
형태로 데이터 전송
이는 POST 요청의 HTTP Body 에서 사용되며, 데이터를 보다 구조적으로 전달할 수 있다.
이와 같은 데이터 전송 방식에는 각각의 데이터 타입이 있으며,
Content-Type
HTTP 헤더를 통해 서버에 데이터 타입을 알려줄 수 있다. 예를 들어,
application/x-www-form-urlencoded
는 쿼리 문자열 데이터를 전송할 때 사용되고, application/json
은 JSON 형식의 데이터를 전송할 때 사용된다.
2. Stateless 와 Stateful
2.1 Stateless (무상태)
HTTP는 기본적으로 Stateless 프로토콜 이다. 이는 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존하지 않음을 의미한다.
Stateless 구조에서 각 요청은 독립적으로 처리되며, 서버는 이전 요청에 대한 정보를 기억하지 않는다. 즉, 서버는 요청이 오면 응답을 보내는 역할만 수행.
따라서 클라이언트가 서버에 요청할 때 마다 통신에 필요한 모든 상태 정보의 데이터를 실어 보내야한다. 이를 통해 서버는 클라이언트의 상태를 유지하지 않고 요청을 처리할 수 있다.
- 장점
- 서버의 설계가 단순하여 유지보수가 용이하다.
- 서버 장애 발생 시 유연한 대응이 가능하며, 서버 간의 분산 처리에 유리하다.
- 서버가 관리해야 하는 리소스의 규모가 감소하여 성능 및 확장성 측면에서 유리하다.
- 단점
- 클라이언트가 매 요청마다 필요한 모든 상태 정보를 포함해야 하므로, 송신해야 하는 데이터 양이 증가할 수 있다.
- 클라이언트와 서버 간의 통신이 반복될 때, 클라이언트 측에서 상태를 유지하기 위한 추가적인 작업이 필요하다.
- Stateless의 예시
대표적인 프로토콜은 HTTP와 DNS가 있다. 홈페이지와 같이 불특정 다수에게 단순한 Html, 이미지 리소스 등을 제공해야하는 경우에 Stateless 아키텍처가 쓰인다.
2.2 Stateful (상태 유지)
Stateful 시스템은 서버가 클라이언트의 상태를 기억하고 클라이언트와의 지속적인 상호작용을 유지하는 것을 의미한다.
예를 들어 로그인을 한 번 하면 페이지를 이동해도 계속 로그인 상태를 유지할 수 있다.
이러한 상태 정보들은 일반적으로 세션(Session)이나 쿠키(Cookie)를 사용하여 저장된다.
- 장점
- 클라이언트와 서버 간의 지속적인 상태 관리를 통해 사용자 경험이 향상됩니다. 사용자가 로그인 후에도 페이지를 이동하거나 여러 요청을 수행할 때 상태가 유지됩니다.
- 서버 측에서 상태를 저장하므로 클라이언트가 매번 모든 상태 정보를 송신할 필요가 없어, 클라이언트 측의 데이터 전송량이 줄어듭니다.
- 단점
- 서버가 클라이언트 상태를 저장하고 관리해야 하므로, 서버의 복잡성과 자원 소모가 증가할 수 있습니다.
- 서버의 상태 정보가 손상되거나 삭제되면 클라이언트의 상태가 유지되지 않아, 사용자 경험에 영향을 줄 수 있습니다.
- Stateful의 예시
Stateful 아키텍처는 사용자가 로그인 후에도 상태를 유지할 수 있게 해준다. 예를 들어, 온라인 뱅킹에서는 사용자가 로그인한 상태로 여러 페이지를 이동할 수 있으며, 이메일 서비스에서는 사용자가 로그인한 상태에서 이메일을 확인하고 보낼 수 있다.
3. Request
- 클라이언트가 서버에 특정 작업을 요청할 때 생성되는 객체를
Request
객체라고 한다.
- 톰캣과 같은 웹 서버는 클라이언트의 요청이 올 때마다 Request 객체를 생성하고, 응답이 끝나면 이 객체는 사라진다.
- Request 객체는 요청과 관련된 데이터를 담고 있으며, 서버는 이 객체를 사용해 클라이언트가 요청한 정보를 처리한다.

4. Session (세션)
- 세션(Session)은 서버가 클라이언트의 상태를 유지하기 위해 사용하는 방법 중 하나다.
- 예를 들어, 사용자가 로그인하면 서버는 해당 사용자의 정보를 세션에 저장하면 이를 통해 사용자가 페이지를 이동하더라도 서버는 여전히 사용자가 누구인지 인식할 수 있다.
- 세션은 특정 사용자와 연결된 정보를 서버 측에서 저장하고, 이를 통해 지속적인 사용자 상태 관리를 가능하게 한다.
5. 통신 방식
5.1 단방향 (Simplex)
- 단방향 통신은 데이터가 한 방향으로만 전송되는 통신 형태를 의미한다.
- 예를 들어, 라디오 방송은 방송국에서 청취자에게만 데이터가 전송되는 단방향 통신입니다. 청취자는 방송국으로 데이터를 전송할 수 없다.
5.2 전이중 (Full Duplex)
- 전이중 통신은 양방향으로 동시에 데이터 전송이 가능한 통신 형태를 의미한다.
- 예를 들어, 전화 통화는 전이중 통신으로, 양쪽에서 동시에 대화가 가능하다.
- 전이중 통신에서는 데이터가 끊기지 않고, 양방향으로 지속적으로 주고받을 수 있다.
5.3 반이중 (Half Duplex)
- 반이중 통신은 양방향으로 데이터 전송이 가능하지만, 한 번에 한 방향으로만 전송이 이루어지는 통신 형태를 의미한다.
- 예를 들어, 무전기는 반이중 통신으로, 한쪽이 말할 때는 다른 쪽이 듣고, 말이 끝나면 반대쪽이 말을 할 수 있다.
- 반이중 통신의 단점은 동시에 데이터를 주고받을 수 없다는 점이다.
Share article