KinArchive를 구축하기 시작했을 때, 우리는 근본적인 선택에 직면했습니다: 가장 빠르게 가장 넓은 사용자에게 도달하기 위해 크로스 플랫폼 프레임워크를 사용할 것인가, 아니면 우리의 가치와 일치하는 단일 생태계를 위해 네이티브로 구축할 것인가. 우리는 Apple을 선택했으며, 이 글에서 그 이유를 설명합니다.
KinArchive는 100% Apple 기술로 구축되었습니다. React Native도, Flutter도, Electron 웹 뷰도 없습니다. 순수한 Swift, SwiftUI, CloudKit, 그리고 Apple이 제공하는 네이티브 iOS 프레임워크입니다. 다음은 그러한 결정의 기술적, 철학적 이유입니다.
개인 정보 보호 아키텍처
가족 문서는 사람들이 가진 가장 민감한 데이터 중 일부입니다. 여권, 의료 기록, 보험 증권, 유언장 - 이것들은 사진이나 메모가 아닙니다. 이 데이터를 잘못 처리하는 것은 단순한 개인정보 침해가 아니라 신원 도용, 보험 사기 또는 더 나쁜 일을 가능하게 할 수 있습니다.
우리는 다음과 같은 아키텍처가 필요했습니다:
- 사용자 데이터가 절대 우리 서버에 닿지 않음
- 우리가 원한다 해도 사용자 문서에 접근할 수 없음
- 사용자가 우리를 신뢰할 필요가 없음—오직 Apple만 신뢰하면 됨
CloudKit Private Database
CloudKit 작동 방식
CloudKit은 세 가지 유형의 데이터베이스를 제공합니다:
- Public Database: 모든 사용자에게 표시되는 데이터 (우리는 사용하지 않음)
- Shared Database: 특정 사용자 간에 공유되는 데이터
- Private Database: 소유자만 볼 수 있는 데이터—Apple ID로 암호화됨
KinArchive는 모든 문서를 사용자의 Private Database에 저장합니다. 즉, 문서가 Apple ID 자격 증명으로 암호화됩니다. Apple도 읽을 수 없습니다. 당연히 우리도 읽을 수 없습니다.
KinArchive를 사용하면 문서가 귀하의 iCloud 계정에 저장되며, 귀하의 iCloud 스토리지 할당량을 사용하고, 귀하의 Apple ID로 암호화됩니다. 우리는 귀하의 문서가 있는 서버가 없습니다. 민감한 파일의 데이터베이스 백업도 없습니다. 말 그대로 귀하의 데이터에 접근할 수 없습니다.
이것은 정책 선택이 아니라 아키텍처 제약입니다. Private Database는 엔드 투 엔드로 암호화되며, 사용자의 인증된 기기만 이를 복호화할 수 있습니다.
타사 분석 없음
많은 앱이 사용자 행동을 추적하고 외부 서비스로 데이터를 전송하는 타사 분석 SDK를 포함합니다. 이러한 SDK는 개발자가 인식하는 것보다 더 많은 것을 수집하는 경우가 많습니다—기기 식별자, 위치 데이터, 사용 패턴.
KinArchive는 타사 분석이 전혀 없습니다. Firebase Analytics, Mixpanel, Amplitude 또는 기타 추적 서비스를 사용하지 않습니다. 우리가 받는 유일한 분석은 Apple의 익명화되고 집계된 App Store 지표입니다.
우리가 모르는 것
- 문서가 몇 개인지 모름
- 어떤 유형의 문서를 저장하는지 모름
- 가족 구성원이 누구인지 모름
- 언제 앱을 사용하는지 모름
- 위치, 기기 ID 또는 브라우징 기록을 모름
생체 인식 보안: Face ID와 Secure Enclave
KinArchive는 인증을 위해 Face ID(또는 이전 기기의 Touch ID)를 사용합니다. 하지만 기술적으로 이것이 실제로 무엇을 의미할까요?
Secure Enclave
Apple 기기에는 Secure Enclave라는 전용 보안 프로세서가 포함되어 있습니다. 이것은 자체 암호화된 메모리를 가진 별도의 칩으로, 메인 프로세서에서 격리되어 있습니다. 귀하의 생체 데이터—얼굴이나 지문의 수학적 표현—는 절대 Secure Enclave를 벗어나지 않습니다.
Face ID 인증 작동 방식
- KinArchive가 LocalAuthentication 프레임워크를 통해 인증 요청
- iOS가 사용자에게 Face ID 프롬프트 표시
- Secure Enclave가 스캔을 저장된 생체 데이터와 비교
- 일치하면 Secure Enclave가 iOS에 성공 신호 반환
- iOS가 KinArchive에 인증 성공 알림
핵심 포인트: KinArchive는 절대 귀하의 생체 데이터를 보지 못합니다. 우리는 iOS로부터 예/아니오 응답만 받습니다. 얼굴 스캔은 Secure Enclave에 남아 하드웨어 암호화로 보호됩니다.
이것은 자체 생체 인식 스캔을 구현하는 앱과 근본적으로 다릅니다. 우리는 생체 정보를 처리, 저장 또는 전송하지 않습니다. 단순히 iOS에 "이 사람이 승인된 사용자인가요?"라고 묻고 iOS가 예 또는 아니오로 답합니다.
결제 처리: StoreKit 2
KinArchive는 App Store를 통해 구독 요금제를 제공합니다. 우리는 Apple의 최신 인앱 구매 프레임워크인 StoreKit 2를 사용합니다.
결제 데이터에 대한 의미
결제 흐름
- 사용자가 KinArchive에서 "구독" 탭
- StoreKit이 Apple의 결제 시트 표시
- 사용자가 Face ID 또는 Apple ID 비밀번호로 인증
- Apple이 결제 처리
- Apple이 KinArchive에 구독 확인 영수증 전송
빠진 것에 주목하세요: 우리는 귀하의 신용 카드 번호, 청구 주소 또는 결제 세부 정보를 절대 보지 못합니다. Apple이 전체 거래를 처리합니다. 우리는 유효한 구독이 있음을 증명하는 암호화 서명된 영수증만 받습니다—그 이상은 아무것도 없습니다.
이것은 Apple의 표준 App Store 모델이지만 강조할 가치가 있습니다: 민감한 가족 문서를 처리하는 앱의 경우 결제 데이터를 절대 건드리지 않는 것은 중요한 보안 속성입니다.
네이티브가 중요한 이유
React Native 및 Flutter와 같은 크로스 플랫폼 프레임워크를 사용하면 개발자가 코드를 한 번 작성하고 여러 플랫폼에 배포할 수 있습니다. 빠른 개발, 공유 코드베이스, 낮은 비용 등 좋은 이유로 인기가 있습니다.
하지만 민감한 문서를 처리하는 보안 중심 앱의 경우 네이티브 개발은 중요한 장점을 제공합니다:
보안 API에 대한 직접 액세스
크로스 플랫폼 프레임워크는 네이티브 API를 추상화 계층으로 래핑합니다. 이러한 계층은 버그를 유발하고, OS 업데이트보다 뒤처지며, 때로는 네이티브 코드에서는 존재하지 않을 보안 취약점을 노출할 수 있습니다.
네이티브로 구축함으로써 다음에 직접 액세스할 수 있습니다:
- LocalAuthentication: 완전한 Secure Enclave 통합을 갖춘 Face ID/Touch ID
- Security.framework: 자격 증명 저장을 위한 Keychain Services
- CloudKit: iCloud 암호화와의 직접 통합
- CryptoKit: Apple의 네이티브 암호화 라이브러리
JavaScript 브리지 취약점 없음
React Native 앱은 "브리지"를 통해 JavaScript와 네이티브 코드 간에 통신합니다. 이 브리지는 역사적으로 보안 취약점의 원천이었습니다—JavaScript 주입, 브리지 하이재킹, 브리지 계층을 통한 데이터 유출.
KinArchive에는 JavaScript도, 브리지도, 웹 뷰도 없습니다. 기기에서 직접 실행되는 컴파일된 Swift 코드입니다.
OS 수준 최적화
네이티브 앱은 크로스 플랫폼 앱이 완전히 활용할 수 없는 OS 수준 최적화의 이점을 누립니다:
- Background App Refresh: iOS 전원 관리와의 적절한 통합
- 메모리 관리: Swift의 ARC가 iOS 메모리 처리와 원활하게 작동
- 시작 성능: 프레임워크 초기화 오버헤드 없음
- 위젯 통합: 홈 화면 만료 알림을 위한 네이티브 WidgetKit
SwiftUI 인터페이스
KinArchive의 UI는 전적으로 Apple의 현대적인 선언형 프레임워크인 SwiftUI로 구축되었습니다. 이것은 다음을 의미합니다:
- 자동 접근성: VoiceOver 지원, Dynamic Type 및 기타 접근성 기능이 기본적으로 작동
- 네이티브 룩앤필: 버튼, 내비게이션 및 상호작용이 iOS 규약과 일치
- 자동 다크 모드: 시스템 외관 설정이 자동으로 적용됨
- 성능: SwiftUI는 iOS 렌더링 파이프라인에 최적화됨
우리가 트레이드오프한 것
Apple을 위한 네이티브 구축에는 비용이 따랐습니다:
- Android 버전 없음: Android 사용자에게 서비스를 제공할 수 없음(아직)
- 웹 앱 없음: 데스크톱 사용자가 브라우저에서 문서에 액세스할 수 없음
- 더 높은 개발 비용: 네이티브 개발이 크로스 플랫폼보다 오래 걸림
- 더 작은 대상 시장: iOS는 전 세계 모바일 시장의 약 27%
우리는 이러한 트레이드오프를 의식적으로 했습니다. 민감한 가족 문서를 처리하는 앱의 경우, Apple 생태계의 보안 및 개인정보 보호 속성이 크로스 플랫폼 접근 방식의 도달 범위보다 중요하다고 믿습니다.
Apple 생태계 정렬
Apple을 위한 구축은 단순히 기술에 관한 것이 아니라 가치 정렬에 관한 것입니다.
Apple은 개인정보 보호에 브랜드를 걸었습니다. "개인정보 보호는 기본적인 인권입니다"는 단순한 마케팅이 아닙니다; iOS 전반의 아키텍처 결정에 반영되어 있습니다: App Tracking Transparency, Privacy Nutrition Labels, Siri 및 Photos를 위한 온디바이스 처리, 그리고 Secure Enclave.
KinArchive를 사용하면 두 주체에게 신뢰를 확장합니다: 우리(앱 로직) 그리고 Apple(플랫폼). 전적으로 Apple 기술로 구축함으로써 신뢰 표면을 최소화합니다. 데이터는 Apple의 생태계에 남아 Apple의 보안 모델로 보호되고 Apple의 암호화로 암호화됩니다.
우리는 타사 클라우드 제공업체, 타사 분석 회사 또는 타사 결제 프로세서를 신뢰하도록 요청하지 않습니다. 이미 iPhone을 사용함으로써 신뢰하는 Apple과 그 위에서 실행되는 애플리케이션 로직을 위한 우리를 신뢰하도록 요청합니다.
신뢰 스택
하드웨어: Apple의 Secure Enclave
운영 체제: 샌드박스화된 앱이 있는 iOS
클라우드 스토리지: CloudKit Private Database (사용자의 iCloud)
인증: Face ID / Apple ID
결제: App Store / StoreKit 2
애플리케이션: KinArchive (네이티브 Swift/SwiftUI)
미래 대비
Apple의 플랫폼은 계속 진화하고 있습니다. 네이티브로 구축함으로써 출시되는 새로운 기술을 채택할 수 있습니다:
- 새로운 보안 기능: iOS 보안이 개선됨에 따라 KinArchive는 이러한 개선 사항을 상속
- 새로운 API: 크로스 플랫폼 지원을 기다리지 않고 새로운 프레임워크에 직접 액세스
- 성능 개선: Swift 및 iOS 최적화가 자동으로 이점 제공
- 새로운 기기: iPad, Mac(Catalyst 또는 네이티브 통해), Apple Watch 통합
결론
Apple을 위한 KinArchive 구축은 가장 빠른 경로도 가장 쉬운 경로도 아니었습니다. 하지만 가족의 가장 민감한 문서를 위임받은 앱을 위한 올바른 경로였습니다.
KinArchive에 여권을 저장할 때, 알 수 없는 클라우드 제공업체에 데이터를 신뢰하는 것이 아닙니다. 자신의 iCloud 계정에 저장하고, 자신의 Apple ID로 암호화하며, 자신의 Face ID로 보호합니다. 우리는 만료 추적, 권한, 감사 추적 등 거버넌스 계층을 Apple의 보안 기반 위에 구축했습니다.
그것이 우리가 Apple을 위해 구축한 이유입니다. 그것이 귀하의 데이터가 안전한 이유입니다.