여러 고객 앱을 운영할 때 계정과 서명 키를 분리하는 방법
React Native와 Expo로 여러 고객 앱을 개발·배포한다면 계정, 비용, 서명 키, 스토어 권한을 어떻게 나눌지 초기에 정해야 합니다. 이 구조를 잘못 잡으면 나중에 소유권 이전, 업데이트, 보안 관리가 복잡해집니다.
핵심 원칙
고객 앱을 여러 개 운영할 때는 “개발자가 편한 구조”보다 “고객 소유권과 보안이 분리되는 구조”가 중요합니다.
권장 원칙은 다음과 같습니다.
- 고객별로 스토어 계정을 분리한다.
- 고객별로 Expo Organization 또는 프로젝트 권한을 분리한다.
- iOS와 Android 서명 키를 고객 단위로 관리한다.
- CI/CD 권한은 최소 권한으로 부여한다.
- 비밀 키는 저장소에 커밋하지 않는다.
컨트롤과 결제는 다르다
하나의 개발자 계정으로 여러 조직에 접근할 수는 있습니다. 하지만 구독 비용, 빌드 사용량, 앱 소유권은 조직이나 스토어 계정 단위로 분리하는 것이 안전합니다.
이렇게 해야 특정 고객과의 계약이 끝나도 앱과 계정 소유권을 정리하기 쉽습니다.
iOS에서 봐야 할 것
iOS는 App Store Connect 권한, 인증서, provisioning profile, API Key 관리가 중요합니다.
자동 제출을 위해 App Store Connect API Key를 사용할 수 있지만, 키 파일은 강한 보안 관리가 필요합니다. 팀에서는 필요한 앱과 역할만 접근하도록 권한을 제한하는 것이 좋습니다.
Android에서 봐야 할 것
Android는 keystore와 Google Play 서비스 계정 권한이 핵심입니다.
keystore를 잃으면 기존 앱 업데이트가 어려워질 수 있으므로 백업 정책이 필요합니다. Google Play API 자동화를 쓴다면 서비스 계정 권한도 필요한 범위로 제한해야 합니다.
고객별 분리가 주는 장점
- 앱 소유권이 명확하다.
- 고객별 비용 산정이 쉽다.
- 권한 사고의 영향 범위를 줄일 수 있다.
- 계약 종료 시 이전이 쉽다.
- 빌드·제출 자동화를 표준화하기 좋다.
작은 팀을 위한 현실적인 구조
처음에는 모든 것을 완벽하게 자동화하기보다, 고객별로 다음 항목만 명확히 관리해도 충분합니다.
- 스토어 계정 소유자
- Expo Organization 또는 프로젝트
- iOS 인증/제출 키
- Android keystore와 서비스 계정
- CI secret 보관 위치
- 권한 회수 절차
듀오랩스가 보는 관점
여러 고객 앱을 만드는 사업에서는 코드보다 운영 구조가 더 오래 남습니다. 계정과 서명 키를 고객별로 분리하면 보안, 비용, 소유권 문제를 훨씬 안정적으로 관리할 수 있습니다.