백엔드 개발/RabbitMQ

[RabbitMQ] vhost에 대한 이해

Razelo 2023. 10. 28. 00:33

 

vhost는 무엇일까? 

  • vhost 즉 virtual host는 메시징 시스템 내에서 논리적으로 분리된 파티션 또는 네임스페이스임
  • vhost는 사용자, exchange, queue 및 binding 등 RabbitMQ 리소스에 대한 독립적인 네임스페이스를 제공 
  • 다양한 프로젝트나 환경에서 동일한 RabbitMQ 인스턴스나 클러스터를 공유하면서 리소스 간 충돌이나 권한 문제를 방지함

 

 

왜 vhost를 사용해야할까? 

리소스 논리적 분리 

  • vhost는 RabbitMQ 서버에서 논리적 분리를 제공함
  • 각 vhost는 독립된 네임스페이스에서 exchanage, queue, binding등의 리소스를 관리함
  • 이 점이 여러 애플리케이션, 프로젝트, 또는 팀이 동일한 RabbitMQ 인스턴스를 공유하면서도 각자의 리소스를 분리할 수 있게 해줌 

 

액세스 제어 

  • 각 vhost는 독립적인 권한 설정을 가질 수 있음 
  • 특정 vhost에 대한 액세스를 제한하거나 특정 사용자 혹은 그룹에게만 특정 권한 부여 가능
  • 위를 통해 다양한 보안 요구 사항 충족 가능 

 

dev, qa, prod 환경 분리 

  • vhost를 사용해서 동일 RabbitMQ 인스턴스 내에서 여러 환경을 논리적으로 분리할 수 있음
  • 따라서 환경 간 리소스 충돌 또는 오버라이드 방지
  • 각 환경에 대한 액세스 권한을 다르게 설정 가능 


multi-tenancy

  • 큰 조직에서 여러 팀 또는 부서가 동일한 RabbitMQ 서버 또는 클러스터를 공유할 수 있음
  • vhost를 사용하면 각 팀 또는 부서마다 독립적인 작업 영역을 제공할 수 있음 

 

이슈 격리 

  • 특정 vhost에서 문제가 발생할 경우 해당 vhost만 영향을 받고 다른 vhost는 안전하게 운영됨 

 


 

그냥 RabbitMQ 서버 인스턴스를 하나 더 사용하면 안되나? 

  • 가능하지만, 추가 서버를 호스팅하려면 인프라 비용이 더 든다, 그러나 vhost를 사용하면 간단한 설정으로도 추가 시스템 리소스 없이 논리적으로 분리해서 사용할 수 있다. 

 


개인적인 요약

간단하게 보자면 그냥 새로운 Web console에서 새로운 계정을 만들고 해당 계정이 동일 인스턴스 내에서 고유한 RabbitMQ 기능을 만들어서 쓸 수 있는 기능으로 보인다. 그런데 과연 이렇게 쓸 일이 많을까라는 생각이 든다. 아마도 데이터 작업을 주로 하는 팀 혹은 RabbitMQ와 연관된 많은 작업이 주 업무인 팀이라면 협업을 위해 이렇게 vhost를 만들어두고 쓰는 것 같다. 

 

특정 도메인에 대한 RabbitMQ 서비스를 하나 더 서비스하기 위해서 동일 인스턴스 내에서 논리적으로 분할해서 사용하는 것은 오히려 좋지 않다고 생각이 들고, 그보다는 사용자 권한 분리 및 동일 환경에서의 테스트가 오히려 더 맞는 목적으로 보인다. 

반응형