연결
연결 (Connections)
연결은 클라이언트와 브로커가 맺는 TCP 기반의 물리적 통신 경로예요. RabbitMQ는 AMQP 0-9-1, AMQP 1.0, RabbitMQ Stream Protocol, MQTT 3.1·3.1.1·5.0, STOMP 1.0~1.2 등 여러 프로토콜을 지원해요. 이 가이드는 네트워크 튜닝을 제외한 연결 전반(수명주기, TLS, 흐름 제어, 모니터링 등)을 다루는 안내서예요.
연결의 기본
클라이언트는 브로커 노드에 연결을 맺고 그 위에서 프로토콜 작업을 수행해요. AMQP 0-9-1에서 연결은 채널(channel)로 다중화되는데, 이는 Channels 가이드에서 자세히 다뤄져요. 대부분의 주제는 여러 프로토콜에 동일하게 적용되며, 프로토콜별 차이가 있을 때만 그 부분을 짚어 줘요.
연결 수명주기와 암호화
연결은 맺고 유지하고 닫는 수명주기를 가지며, 클라이언트는 원할 때 연결을 닫을 수 있어요. 클라이언트 연결의 트래픽을 암호화하려면 TLS를 사용해요. 개별 연결에 **연결 이름(connection name)**을 지정해 두면 문제가 생겼을 때 더 쉽게 추적할 수 있어요.
모니터링과 높은 연결 회전(churn)
RabbitMQ는 연결 이벤트 로깅을 제공하고, 연결 수와 연결 회전율을 모니터링할 수 있어요. 연결이 짧은 시간에 많아졌다 줄어드는 "연결 회전(churn)"이 높아지면 리소스 낭비와 문제가 생길 수 있어서, 이를 감지하는 게 중요해요. 동시에 유지해야 하는 연결이 많을 때는 연결을 어떻게 효율적으로 운영할지를 신경 써야 해요.
흐름 제어와 연결 예외
브로커가 압박을 받으면 연결에 흐름 제어(flow control)를 걸어 클라이언트의 전송을 일시 중지시키기도 해요. 프로토콜 오류가 발생하면 연결 예외(protocol error)가 나고, 클라이언트는 이를 처리해야 해요. 클라이언트 속성과 기능(capabilities) 서술은 연결을 맺을 때 브로커와 협상에 쓰여요.
네트워크 장애 시의 복구 전략도 중요해요. 클라이언트 라이브러리는 보통 자동으로 재연결을 시도하며, 연결 복구와 함께 퍼블리셔 확인 등 데이터 안전 장치를 조합해 사용하는 걸 권장해요.