본문 바로가기

화이트라벨 및 멀티테넌트 앱

하나의 코드베이스로 모든 테넌트의 앱 배포

각 테넌트, 브랜드 또는 위치별로 고유한 Capgo 채널을 제공하세요. 다른 테넌트에 영향을 주지 않고 특정 테넌트의 웹 레이어만 업데이트할 수 있으며, Capgo Build로 브랜드 맞춤형 네이티브 셸을 구축할 수 있습니다.

1개의 codebase
테넌트별로 공유되는 Capacitor 앱
테넌트당 1개 채널
독자적인 bundle, 히스토리 및 rollback
클라우드 빌드
Android flavors 및 iOS schemes

Shell

Capacitor 앱

Tenants

채널

네이티브

Capgo 빌드

문제점

고객마다 포크가 생기면 화이트라벨 앱 관리가 어려워집니다

브랜드 변형이 빠르게 늘어납니다

고객마다 자체 로고, 테마, 기능 세트, 콘텐츠, 출시일을 원합니다. 별도 포크는 이런 요구를 매 릴리스마다 유지보수 비용으로 바꿉니다.

스토어 심사가 테넌트 수정을 늦춥니다

특정 테넌트의 메뉴 오타나 onboarding 수정이 새 바이너리와 스토어 심사(보통 24~48시간, 때로는 훨씬 더 오래)를 기다려서는 안 됩니다.

글로벌 릴리스는 너무 일괄적입니다

단 한 번의 글로벌 업데이트가 모든 브랜드를 한 번에 망가뜨릴 수 있습니다. 브랜드마다 포크를 만들면 팀 전체가 느려집니다. 테넌트별 릴리스 경로가 필요합니다.

일반적인 설정

Capgo 앱의 화이트라벨 구현 사례

고객 브랜드 기반 SaaS 앱

각 비즈니스 고객은 자체 로고, 테마, onboarding 문구, 기능 구성을 갖추고 자체 채널로 업데이트를 받습니다.

프랜차이즈 또는 지점 앱

각 레스토랑, 클리닉, 체육관, 지점은 새 바이너리 없이 로컬 메뉴, 에셋, 캠페인 화면을 라이브 업데이트로 받습니다.

미니 앱 마켓플레이스

호스트 앱이 워크스페이스나 미니 앱 목록을 보여주고, 런타임에 setChannel()로 기기를 해당 Capgo 채널로 전환합니다.

솔루션

단일 앱 쉘, 테넌트별 릴리스 레인

네이티브 쉘은 공유된 채로 유지됩니다. 각 테넌트의 웹 레이어는 자체 채널을 통해 배포됩니다.

테넌트별 채널

각 테넌트, 프랜차이즈, 워크스페이스마다 채널이 하나씩 할당됩니다. 한 테넌트에만 또는 전체에 배포하고, 다른 채널은 건드리지 않고 특정 채널만 롤백할 수 있습니다.

Channels 문서

런타임 시 셀프 할당

셀프 할당 기능을 사용하면 앱이 setChannel()을 호출하여 디바이스를 해당 테넌트의 채널에 할당합니다. Capgo는 업데이트 확인 시마다 여전히 채널을 검증합니다.

setChannel() 레퍼런스

셸별 버전 타겟팅

테넌트마다 서로 다른 Native Build 버전을 사용하는 경우가 많습니다. 채널별로 메이저 업데이트를 차단하거나 최소 Native Build 버전을 설정하여, 번들이 실행 가능한 셸에만 전달되도록 하세요.

버전 타겟팅 문서

Capgo 브랜드 셸 빌드

각 Android flavor 또는 iOS scheme를 클라우드에서 빌드하고 스토어에 upload하세요. 매주 변경되는 웹 레이어에는 Live Update를 사용하면 됩니다.

Build 옵션

작동 방식

화이트라벨 팀이 Capgo로 배포하는 방법

단일 Capacitor 코드베이스로 테넌트당 하나의 채널을 운영하세요. 명령어와 code은 Capgo CLI 및 updater 문서를 참조하세요.

  1. 테넌트별 채널 생성

    각 테넌트는 고유한 bundle과 히스토리를 가진 채널을 할당받습니다. 앱에서 직접 채널을 지정할 수 있도록 설정하여 디바이스를 해당 채널로 이동시키세요.

    npx @capgo/cli@latest channel add acme com.example.app --self-assign
    npx @capgo/cli@latest channel add globex com.example.app --self-assign
    Channels 문서
  2. 테넌트별 bundle upload

    테넌트의 테마와 설정을 적용하여 웹 레이어를 빌드한 후, 해당 테넌트의 채널에만 upload하세요. 다른 테넌트들은 기존 bundle을 그대로 유지합니다.

    npx @capgo/cli@latest bundle upload --channel acme
    npx @capgo/cli@latest bundle upload --channel globex
    Rollback 문서
  3. 로그인 시 디바이스를 해당 테넌트로 이동

    로그인 후 테넌트의 채널로 setChannel()을 호출하세요. 선택된 채널은 디바이스에 저장되며, 다음 업데이트 체크 시 적용됩니다.

    import { CapacitorUpdater } from '@capgo/capacitor-updater'
    
    await CapacitorUpdater.setChannel({
      channel: tenant.channel,
      triggerAutoUpdate: true,
    })
    setChannel() 레퍼런스
  4. 클라우드에서 브랜드별 쉘 빌드

    테넌트별 스토어 등록 정보, 아이콘 또는 권한이 필요한 경우, Capgo Build를 사용하여 해당 flavor나 scheme을 빌드하세요. 별도의 Mac은 필요하지 않습니다.

    npx @capgo/cli@latest build request com.acme.app --platform android --android-flavor acme
    npx @capgo/cli@latest build request com.acme.app --platform ios --ios-scheme Acme
    Build 옵션

Capacitor로 빌드된 앱

지역 미디어 및 통신사 앱은 하나의 코어를 공유하지만 로컬 제어가 필요합니다

지역 스포츠, 엔터테인먼트, 통신 브랜드는 하나의 앱 기반을 재사용하면서 각 브랜드나 국가에 맞게 일정, 캠페인, 지원, 시장별 콘텐츠를 변경할 수 있습니다.

Tigo Sports Guatemala 앱 아이콘 스포츠

Tigo Sports Guatemala

일정과 로컬 콘텐츠를 시장별로 제어해야 하는 지역 스포츠 미디어 앱.

Google Play 설치 수
160만
스토어 평점
3.3
TV SPIELFILM - TV-Programm 앱 아이콘 엔터테인먼트

TV SPIELFILM - TV 편성표

시장 및 편성 시간대에 따라 콘텐츠 노출이 달라지는 엔터테인먼트 가이드.

Google Play 설치 수
1,210만
스토어 평점
4.4
Mi Orange 앱 아이콘 도구

Mi Orange

공유 계정 패턴이 여전히 현지 제품 및 지원 콘텐츠를 필요로 하는 통신사 앱.

Google Play 설치 수
930만
스토어 평점
4.2

고객 사례

Capgo로 배포하는 팀들의 이야기

5.0/5 개발 팀 평점 9,400+ 팀 리뷰 보기

no-tone @ Webincode

Webincode 개발자

“Device ID를 특정 그룹에 추가하고 변경 사항을 해당 그룹에만 푸시할 수 있다는 점이 정말 큰 도움이 됩니다.”

Nate van Jole

Private CTO

“설정은 하루도 안 걸렸습니다. 채널 기반 롤아웃 덕분에 프로덕션 사용자에게 배포되기 전에 제 기기에서 먼저 테스트할 수 있었습니다.”

Sergiu S의 사진

Sergiu S

drivolino GmbH 리드 개발자

“Capgo Capacitor Updater 플러그인 덕분에 업데이트 배포 방식이 완전히 바뀌었습니다. 며칠씩 걸리던 작업이 이제는 단 몇 분 만에 끝납니다.”

자주 묻는 질문

White-label 관련 FAQ

하나의 Capgo 설정으로 여러 브랜드를 운영하기 전, 팀들이 자주 묻는 질문입니다.

브랜드마다 별도의 Capgo 앱이 필요한가요?

각 브랜드가 스토어에 고유한 App ID를 가진 경우에만 필요합니다. 하나의 스토어 앱으로 여러 테넌트를 서비스한다면, 테넌트별로 채널을 나누어 하나의 Capgo 앱으로 운영할 수 있습니다. 반면, 브랜드별로 별도의 스토어 앱을 출시한다면 각각 별개의 Capgo 앱이 되며, 각 앱은 고유한 채널을 가집니다.

Channels 문서

앱 내부에서 사용자가 테넌트를 전환할 수 있나요?

네, 가능합니다. 테넌트의 채널이 셀프 할당(self-assignment)을 허용한다면, 앱에서 setChannel()을 호출하면 됩니다. 현재 플러그인 버전에서는 선택 사항이 디바이스에 저장되며, 다음 업데이트 체크 시 적용됩니다.

setChannel() 레퍼런스

일부 테넌트가 구버전 Native Build를 사용 중이라면 어떻게 되나요?

버전 타겟팅을 사용하세요. 특정 채널에서 메이저 업데이트를 차단하거나, 번들에 최소 Native Build 버전을 설정하여 구버전 셸(shell)에서도 실행 가능한 번들만 유지되도록 할 수 있습니다.

버전 타겟팅 문서

다른 테넌트에 영향을 주지 않고 특정 테넌트만 롤백할 수 있나요?

네. 각 채널은 자체 bundle 히스토리를 유지합니다. 테넌트의 채널을 이전 bundle로 롤백해도 다른 채널은 그대로 유지됩니다.

Rollback 문서

스토어 출시가 여전히 필요한 경우는 무엇인가요?

앱 이름, 아이콘, 권한, native plugin, native code은 바이너리에 포함됩니다. Capgo Build로 각 flavor 또는 scheme을 빌드해 App Store Connect와 Google Play에 업로드할 수 있습니다.

Capgo 빌드 문서

직접 앱에서 테넌트 채널 테스트해 보기

14일 체험 기간에 테넌트 채널 두 개를 만들고, 각 채널에 bundle을 업로드한 뒤 setChannel()로 테스트 기기를 두 채널 간에 전환해 보세요.