채널

채널 (Channels)

채널은 AMQP 0-9-1의 추상화로, 연결 없이는 존재할 수 없어요. 그래서 먼저 Connections 가이드를 읽어 두는 걸 추천해요. 채널은 "하나의 TCP 연결을 공유하는 가벼운 연결"이라고 생각하면 돼요.

출처: RabbitMQ — Channels

왜 채널이 필요한가

어떤 애플리케이션은 브로커에 여러 개의 논리적 연결이 필요해요. 하지만 TCP 연결을 여럿 계속 열어 두는 것은 시스템 리소스를 소비하고 방화벽 구성도 어렵게 만들기 때문에 바람직하지 않아요. AMQP 0-9-1은 연결을 channel로 다중화해서 이 문제를 해결해요. 채널은 단일 TCP 연결을 공유하는 경량 연결이에요.

클라이언트가 수행하는 모든 프로토콜 연산은 채널 위에서 일어나요. 특정 채널에서의 통신은 다른 채널과 완전히 분리되어 있어서, 모든 프로토콜 메서드는 채널 ID(채널 번호)를 함께 실어 나릅니다. 브로커와 클라이언트는 이 정수로 해당 메서드가 어느 채널을 위한 것인지 판단해요.

채널 수명주기와 예외

채널은 열고 닫는 수명주기를 가지며, 채널 수준의 오류가 나면 **채널 예외(channel exception)**가 발생해요. 채널 예외가 뜻하는 바를 이해하면 문제를 진단하는 데 많은 도움이 돼요. 채널은 리소스를 사용하므로 너무 많이 열지 않는 게 좋고, 채널 수와 관련 메트릭을 모니터링해서 흔한 문제를 식별할 수 있어요.

흐름 제어와 채널

브로커가 압박을 받을 때 흐름 제어가 채널에도 적용될 수 있어요. 채널 개념을 잘 이해하면 멀티스레드 애플리케이션에서 연결 풀을 어떻게 구성할지, 채널을 스레드 간에 어떻게 안전하게 나눌지도 명확해져요.

더 알아보기