멀티플렉싱(Multiplexing)은 컴퓨터 네트워크, 운영체제, 웹 통신 등 다양한 기술 영역에서 활용되는 핵심 개념이다.
여러 데이터 흐름을 하나의 경로로 통합하거나, 반대로 하나의 흐름을 여러 경로로 나누는 과정에서 사용된다.
이 글에서는 멀티플렉싱의 기본 개념부터, 각 기술 계층에서 어떤 방식으로 적용되는지를 정리한다.
멀티플렉싱(Multiplexing)은 여러 개의 입력 데이터를 하나의 경로로 통합하는 기술이다.
반대로, 디멀티플렉싱(Demultiplexing)은 하나의 입력 데이터를 여러 대상으로 분리하여 전달하는 기술이다.
전기공학에서의 멀티플렉서(MUX)는 이 개념을 잘 보여준다. MUX는 여러 입력 중 하나를 선택하여 단일 출력으로 보내는 회로이며, 디멀티플렉서(DEMUX)는 단일 입력을 여러 출력 중 하나로 전달하는 장치이다. 소프트웨어 및 네트워크에서도 이와 유사한 개념이 적용된다.
OSI 7계층 중 전송 계층은 애플리케이션 간 신뢰성 있는 데이터 전송을 담당한다.
멀티플렉싱은 이 계층에서 핵심적인 기능 중 하나이다.
전송 계층은 여러 애플리케이션(예: 웹브라우저, 메신저, 동영상 플레이어 등)으로부터 각각 데이터를 수신한 뒤, 각 데이터를 TCP/UDP 세그먼트로 캡슐화하고 네트워크 계층으로 전달한다. 이 과정이 멀티플렉싱이다.
즉, N개의 소켓이 생성한 데이터를 하나의 네트워크 경로(IP 주소 및 포트)로 전달하기 위해 전송 계층에서 통합 처리한다.
반대로 수신 측에서는 네트워크 계층에서 전달된 데이터를 분석하여, 세그먼트의 포트 번호를 기준으로 적절한 애플리케이션 소켓으로 분배한다. 이는 디멀티플렉싱에 해당한다.
서버는 클라이언트의 요청을 처리하기 위해 병렬처리를 수행해야 한다.
기본적인 방식으로는 멀티프로세스, 멀티스레드 방식이 있으며, 이들은 요청 수에 따라 프로세스/스레드를 개별 생성하여 병렬성을 확보한다. 그러나 이 방식은 자원 소모가 크고, 확장성이 낮다는 단점이 있다.
이러한 한계를 극복하기 위해 등장한 방식이 I/O 멀티플렉싱이다.
하나의 서버 프로세스가 여러 클라이언트 소켓의 상태를 감시하면서 이벤트가 발생한 소켓만 선택적으로 처리하는 방식이다.
사용되는 대표적인 시스템 호출은 다음과 같다.
select
poll
epoll
(Linux)kqueue
(BSD 계열)Nginx
, Redis
, Node.js
등은 모두 이벤트 루프와 epoll 또는 kqueue 기반의 멀티플렉싱 구조를 사용한다.HTTP/1.1에서는 하나의 연결로 여러 리소스를 동시에 요청하기 어렵다는 구조적 한계가 존재했다.
브라우저는 이를 우회하기 위해 여러 개의 TCP 연결을 만들어 병렬 요청을 시도했지만, 이로 인한 오버헤드가 발생하였다.
HTTP/2.0은 멀티플렉싱 기능을 내장하고 있으며, 하나의 TCP 연결에서 여러 개의 요청/응답을 논리적으로 동시에 처리할 수 있는 구조를 가진다. 이 구조에서 각 요청은 고유한 stream ID를 가지며, 서로 간섭하지 않고 동시에 전송된다.
멀티플렉싱은 다음과 같은 상황에서 유용하게 적용된다.
적용 영역 | 필요성 |
---|---|
전송 계층 | 여러 애플리케이션 데이터를 하나의 네트워크 경로로 통합/분배할 필요가 있음 |
서버 프로그래밍 | 다수의 클라이언트 요청을 적은 리소스로 처리해야 함 |
웹 통신 (HTTP/2) | 하나의 연결로 복수 리소스를 병렬 전송해야 성능이 개선됨 |
멀티플렉싱은 효율적인 리소스 활용, 지연시간 감소, 높은 동시 처리량 확보 등을 기대할 수 있기 때문에 현대 네트워크 시스템 전반에서 필수적인 요소로 자리 잡고 있다.
참고 블로그 : https://12bme.tistory.com/741