RabbitMQ에서 connection은 broker로의 TCP 연결이고, channel은 connection 안의 경량 가상 연결입니다. (많은 connection이 아니라) channel을 올바르게 사용하는 것이 효율성에 중요하며 흔한 모범 사례입니다.
connection vs channel
CONNECTION → RabbitMQ broker로의 TCP 연결:
→ 상대적으로 무거움(HEAVY) (실제 네트워크 연결, 설정/유지에 오버헤드)
CHANNEL → 단일 TCP connection 위에 다중화(MULTIPLEX)된 경량 가상 연결:
→ 많은 channel이 하나의 connection을 공유 → 경량; 대부분의 작업이 channel에서 일어남
→ 발행, 소비, queue 선언 → channel을 통해 수행
→ 하나의 connection이 많은 channel을 가질 수 있음 (다중화가 TCP 오버헤드 감소)
왜 channel을 쓰는가 (많은 connection이 아니라)
✗ 많은 CONNECTION 열기 → 무거움 (각각이 TCP 연결) → 리소스 소모,
broker의 connection 한계 고갈 (흔한 실수/안티패턴)
✓ 적은 connection + 많은 CHANNEL 사용 → channel은 저렴; connection 위에 다중화 →
효율적
→ 전형적 패턴: 프로세스/애플리케이션당 ONE connection, 스레드/작업/consumer당 CHANNEL
(스레드 간에 channel 공유 금지 — channel은 thread-safe 아님)
