SaaS 플랫폼에서 자신의 도메인을 가져오는 방법은?
April 9, 2024
사용자 정의 도메인은 SaaS 서비스 플랫폼에서 널리 사용되는 기능입니다. Shopify와 같은 유명 플랫폼은 이 서비스를 제공하여 사용자에게 더 개인화되고 유연한 경험을 제공합니다.
기존 운영 모델에서 SaaS 플랫폼의 사용자는 플랫폼이 제공하는 소프트웨어 서비스를 구매하여 독특한 사용자 경험을 만들고, 이에 따라 최종 사용자에게 서비스를 제공합니다. 서비스의 시작점으로서 SaaS 플랫폼은 일반적으로 각 사용자에게 무작위로 생성된 서브도메인을 기본 접근 지점으로 할당합니다. 그러나 개인화된 접근 주소에 대한 수요를 충족시키기 위해 플랫폼은 사용자가 자신의 도메인 이름을 접근 지점으로 설정할 수 있도록 지원하여 브랜드 인지도와 사용자 접근성을 높입니다.
이 글은 실제 제품 개발에서 사용자 정의 도메인 기능을 효과적으로 구현하는 방법을 깊이 있게 탐구하여 개발자들에게 유용한 통찰과 참고 자료를 제공하는 것을 목표로 합니다.
문제 분석
당신은 궁금할 수 있습니다: 사용자가 도메인의 DNS CNAME 레코드를 플랫폼이 제공한 무작위 도메인으로 가리키면 이 기능을 달성할 수 있지 않을까요? 실제로 문제는 더 복잡하며, 주로 다음 두 가지 측면에 초점이 맞춰져 있습니다:
-
현대 인터넷 서비스는 모두 HTTPS 프로토콜을 사용하여 통신 보안을 보장합니다. 최종 사용자가 SaaS 플랫폼이 제공한 사이트에 접근하려고 할 때, 플랫폼이 제공한 무작위 서브도메인을 진입점으로 사용하면 와일드카드 TLS 인증서를 직접 사용할 수 있어 인증서 관리에 문제가 없습니다. 이때 사용자와 SaaS 플랫폼의 HTTPS 서비스 간의 핸드셰이크는 신뢰할 수 있습니다. 그러나 사용자 정의 도메인을 사용할 때, SaaS 플랫폼은 해당 도메인에 대한 신뢰할 수 있는 인증서를 소유해야 최종 사용자의 브라우저가 올바른 연결을 설정할 수 있습니다. 이는 플랫폼이 사용자가 업로드한 인증서를 수락하거나 호스팅된 인증서 관리 서비스를 제공해야 함을 의미합니다.
-
보안 연결이 설정된 후, SaaS 플랫폼은 최종 사용자가 플랫폼에서 어떤 테넌트에 접근하려고 하는지 식별해야 합니다. 이를 위해 플랫폼은 도메인과 테넌트 식별자의 매핑 테이블을 유지해야 하며, 들어오는 요청(예: Host 요청 헤더)에서 특정 테넌트 정보를 추출하여 매핑 테이블을 조회하여 테넌트 ID를 찾아 요청자에게 필요한 데이터를 반환해야 합니다.
TLS 인증서 관리
주요 클라우드 서비스
AWS(Amazon Web Services) 및 GCP(Google Cloud Platform)와 같은 주요 클라우드 서비스 제공업체는 포괄적인 인증서 관리 서비스와 해당 API 인터페이스를 제공하며, Cloudflare는 SaaS 서비스를 위한 전용 솔루션인 Cloudflare for SaaS를 출시했습니다.
AWS를 예로 들면, AWS Certificate Manager 서비스를 통해 SaaS 플랫폼은 API를 통해 사용자가 구성한 사용자 정의 도메인에 대한 신뢰할 수 있는 인증서를 쉽게 발급할 수 있습니다. AWS 생태계 내의 서비스로서, ACM이 발급한 인증서는 Elastic Load Balancer 및 CloudFront와 같은 다른 핵심 기능과 원활하게 통합되어 TLS 종료에 직접 사용될 수 있습니다.
이러한 클라우드 서비스를 통해 플랫폼은 TLS 인증서를 원스톱으로 관리할 수 있으며, 이는 확실히 매력적으로 들립니다. SaaS 서비스 초기 단계에서 이러한 클라우드 서비스를 사용하면 개발자의 부담을 크게 줄여 비즈니스 로직 구현에 더 집중할 수 있습니다. 그러나 일관된 사용자 경험을 추구함에 따라 이러한 클라우드 서비스는 몇 가지 잠재적인 문제를 노출시킵니다.
AWS Certificate Manager를 예로 들면, 인증서 발급 시 도메인 소유권 검증이 필요합니다. 이 과정은 도메인 소유자가 DNS 레코드에 특정 CNAME 레코드를 설정하여 acm-validations.aws
주소를 가리키도록 요구합니다. 또한, 이 레코드는 후속 인증서 갱신 작업을 위해 장기간 유지되어야 합니다. 이는 SaaS 플랫폼이 클라우드 플랫폼에 특화된 특정 구현 세부 사항을 사용자에게 노출해야 함을 의미합니다. 또한, 이 메커니즘은 ACME 프로토콜과 같은 일반적인 인증서 자동화 표준을 따르지 않습니다. 따라서 SaaS 플랫폼은 AWS 클라우드 서비스에 강하게 결합될 수 있습니다. SaaS 플랫폼에 많은 사용자가 있을 때, 마이그레이션(각 사용자가 DNS 레코드를 재조정해야 함)은 거의 불가능한 작업이 됩니다.
또한, ACM 서비스가 발급한 신뢰할 수 있는 인증서는 다운로드를 지원하지 않아, 이러한 인증서는 AWS 생태계 내의 다른 서비스에서만 사용할 수 있으며, 다른 클라우드 제공업체로 쉽게 확장하기 어려워 다중 클라우드 유연성을 제한합니다.
자동화된 인증서 관리
Let's Encrypt 및 Automatic Certificate Management Environment (ACME, RFC8555) 프로토콜을 기반으로 한 기타 인증 기관(CA)이 점차 주류가 되면서, 자동화된 인증서 관리는 더 이상 클라우드 서비스의 전유물이 아닙니다. 오늘날, 어떤 개발자라도 쉽게 자동 인증서 발급 및 갱신을 구현할 수 있어 서비스의 사용성과 보안을 크게 향상시킬 수 있습니다.
ACME 사양은 DNS TXT, HTTP, TLS ALPN 등 다양한 도메인 소유권 검증 메커니즘을 정의하여 인증서 신청자에게 유연하고 다양한 옵션을 제공합니다. SaaS 시나리오에서 HTTP 인증 방식은 특히 적합합니다. 사용자는 자신의 사용자 정의 도메인에 대해 DNS CNAME 레코드를 구성하여 플랫폼이 할당한 무작위 도메인 또는 통합 CNAME 접근 지점으로 가리키기만 하면 됩니다. 예를 들어, 플랫폼은 example.com을 cname.contoso.com으로 해석하도록 요구할 수 있으며, 이 CNAME 접근 지점은 플랫폼이 자체 배포한 HTTP 서비스를 가리킵니다. 이 설계는 인증서 발급 과정을 단순화하여 더 간결하고 효율적으로 만듭니다.
도메인 구성이 올바르게 완료되면, 플랫폼은 CA의 API를 호출하여 인증서 주문을 생성할 수 있습니다. CA는 그런 다음 HTTP를 통해 사용자의 도메인에 접근합니다. 이때 도메인은 이미 플랫폼의 접근 지점을 가리키고 있으므로, 플랫폼은 CA의 특정 무작위 문자열 검증 조건을 쉽게 충족시켜 도메인 소유권 검증을 완료하고 인증서를 다운로드할 수 있습니다.
이 메커니즘은 사용자의 구성 과정을 단순화할 뿐만 아니라, DNS 레코드를 자주 수정하는 번거로움을 피할 수 있습니다. 더 중요한 것은, 플랫폼이 특정 클라우드 서비스 제공업체에 얽매이지 않게 하여 SaaS 플랫폼이 더 친절하고 일관된 사용자 경험을 제공할 수 있게 합니다.
또한, 이 메커니즘을 사용한다고 해서 클라우드에서 TLS 종료를 위해 CDN 또는 로드 밸런싱 서비스를 활용할 수 없는 것은 아닙니다. 실제로, AWS와 같은 클라우드 서비스 제공업체의 인증서 관리 서비스는 개발자가 API를 통해 자체 관리 인증서를 가져와 트래픽 접근을 가능하게 지원합니다. 개발자는 자신의 프로그램에서 인증서 발급을 완료한 후, 인증서를 클라우드 서비스 제공업체의 인증서 관리 서비스로 가져와 클라우드 리소스의 원활한 통합과 효율적인 활용을 달성할 수 있습니다.
다중 테넌트 시스템
TLS 인증서를 성공적으로 처리한 후, 다음 도전 과제는 SaaS 플랫폼에서 다중 테넌트 로직을 관리하는 것입니다. SaaS 플랫폼은 소수의 사용자의 특정 요구만을 충족시키는 것이 아니라, 다양한 사용자에게 통합된 기능 세트를 제공하려고 하기 때문에, 그들의 시스템 아키텍처는 일반적으로 다중 테넌트 설계를 채택합니다. 이 설계에서 플랫폼은 고유한 테넌트 ID를 통해 다른 테넌트를 식별하고, 각각의 최종 사용자에게 해당 서비스를 제공합니다.
테넌트 식별 메커니즘을 구현하는 것은 비교적 간단합니다. 도메인 소유권 검증과 인증서 관리가 필요하기 때문에, 사용자는 SaaS 플랫폼 콘솔에서 사용자 정의 도메인을 구성하고 시스템 지시에 따라 DNS 해석을 설정해야 합니다. 시스템이 인증서 구성을 완료하면, 사용자 정의 도메인의 기록이 시스템에 저장되고 현재 테넌트와 연결됩니다. 따라서 시스템이 요청을 받을 때마다, HTTP 요청 헤더에서 Host 필드를 추출하여 클라이언트 브라우저가 사용한 접근 도메인을 결정할 수 있습니다. 그런 다음 이 도메인에 해당하는 테넌트 기록을 조회하여 테넌트 식별자를 빠르게 식별할 수 있습니다. 테넌트 식별자를 얻은 후, 시스템은 해당 테넌트의 데이터를 정확하게 조회하고 접근할 수 있습니다.
결론
사용자 정의 도메인은 SaaS 플랫폼의 핵심 기능으로, 사용자에게 더 개인화되고 유연한 접근 경험을 제공하기 위해 설계되었습니다. 사용자 정의 도메인 기능을 구현하는 과정에서 두 가지 주요 문제를 해결해야 합니다: TLS 인증서 관리와 다중 테넌트 관리.
이 두 문제를 해결함으로써, 우리는 테넌트 식별에서 통신 보안과 개인화된 서비스를 보장할 수 있으며, SaaS 플랫폼의 서비스 품질과 사용자 경험을 크게 향상시킬 수 있습니다. 이는 플랫폼에 대한 사용자의 신뢰와 만족도를 강화하고, 지속 가능한 발전을 촉진하는 데 도움이 될 것입니다.