멀티 테넌시는 소프트웨어 어플리케이션의 단일 인스턴스가 여러 고객에게 서비스를 제공하는 아키텍처이다.
즉, 여러 테넌트(사용자)를 가진 아키텍처라는 의미다. 중요한 점은 각각의 사용자가 서비스를 독립적으로 이용할 수 있어야 한다는 것이다.
예를 들어 메일을 확인하려 열었는데 나에게 온 메일 뿐 아니라 모든 사람의 메일이 들어있다면 다소 당황스러울 것이다. 이처럼 멀티 테넌시 구조에서는 각각의 사용자에게 독립적인 서비스 환경을 제공해야한다.
멀티 테넌시 구조의 가장 큰 장점은 고객마다 새로운 시스템을 제공하는 형태가 아니라 하나의 시스템으로 여러 고객에게 제공하는 것이다. 따라서 소프트웨어 개발과 유지보수 비용의 공유가 가능하다. 오류 발견 시 하나만 수정하면 모든 고객에게 똑같이 적용되고 업데이트 시에도 한 번의 업데이트만으로 모든 고객이 이용 가능하다.
개인 맞춤 서비스를 제공하기 위해서는 아주 정교한 멀티 테넌시 아키텍처를 적용해야 하는데 이를 개발하는 데 있어 상당한 비용과 인적 자원이 필요하다.
버그나 장애 발생 시 모든 사용자가 겪을 수 있고 사용자마다 업데이트를 받아들이는 무드가 다르다. 즉 누구에게는 유용하지만 누구에게는 불편함으로 다가갈 수 있는 것이다.
가장 큰 단점은 보안이다. 멀티 테넌시 구조는 하나의 DB에 모든 사용자의 정보가 공존하기 때문에 혼선이 없도록 방지해야 하고 해킹 등의 보안 공격 발생 시 모든 사용자의 정보가 한 번에 흘러나갈 수 있기 때문에 주의해야 한다.
단일 테넌트 클라우드에서는 각 고객이 소프트웨어 어플리케이션의 전용 인스턴스를 가지고 있다. 반면 SaaS(Software as a Service) 제공자는 DB의 한 인스턴스에서 어플리케이션을 실행하고 여러 고객에게 엑세스를 제공할 수 있다.
다만 이러한 시나리오는 각 테넌트의 데이터의 격리가 필요하다.
장단점을 적다보니 장점보다는 단점을 많이 적게 되었는데 생각해보면 이러한 멀티 테넌시 구조가 지속적으로 사용되는 것을 보면 단점에 비해 장점이 확실하거나 단점을 조금 보완해서라도 쓸만큼 가치있다는 뜻이겠다.
그런데 개개인이 커스터마이징이 가능한 웹사이트를 멀티 테넌시 구조로 구현할 경우 어떠한 방식으로 구현하는 지 궁금해진다.