8분

모바일 앱의 Apple Pay: 개념과 작동 방식

모바일 앱에서 Apple Pay가 무엇인지, 내부에서 어떻게 작동하는지, 안전하게 통합해 결제 속도를 높이고 전환율을 개선하는 방법을 알아보세요.

모바일 앱의 Apple Pay: 개념과 작동 방식

Apple Pay가 무엇이며 모바일 앱에서 왜 중요한가

Apple Pay란

Apple Pay는 애플의 디지털 월렛이자 결제 서비스입니다. 사용자는 iPhone, Apple Watch, iPad 또는 Mac에 신용카드, 직불카드, 일부 선불·스토어 카드를 안전하게 저장하고 탭 한 번 또는 얼굴·지문 확인만으로 결제할 수 있습니다.

카드 번호나 청구 정보를 입력하는 대신 사용자는 Face ID, Touch ID 또는 기기 암호로 인증합니다. Apple은 기기별 토큰을 생성해 실제 카드 번호가 가맹점에 전달되지 않도록 합니다.

Apple Pay가 동작하는 곳

Apple Pay는 주로 세 가지 맥락에서 작동합니다:

  • 오프라인(매장): iPhone 또는 Apple Watch의 NFC를 이용한 비접촉 결제
  • : iOS 또는 macOS의 Safari에서 상품/장바구니 페이지 등에서의 체크아웃
  • 인앱: iOS와 iPadOS 앱 내부의 네이티브 결제 시트로, 앱의 결제 또는 결제 버튼에서 바로 호출

이 가이드는 앱 내부에서 전 경험이 앱 안에 머무는 인앱 Apple Pay에 중점을 둡니다.

모바일 앱에서 왜 중요한가

작은 화면에서 카드 정보를 입력하는 것은 느리고 오류가 발생하기 쉽습니다. Apple Pay는 여러 입력 필드를 하나의 상호작용으로 대체하여 보통:

  • 체크아웃 시간을 단축
  • 장바구니 이탈 감소
  • 완료 주문 및 구독 가입 증가

카드와 주소가 이미 기기에 저장되어 있기 때문에 첫 구매자도 마찰이 줄어듭니다.

사용 가능성 및 사용 시기

Apple Pay는 지원 지역의 최근 iPhone, iPad, Apple Watch, Mac 모델에서 동작하며 Visa, Mastercard, American Express 등 주요 네트워크와 일부 지역 네트워크를 지원합니다(발급 은행에 따라 다름).

Apple Pay는 다음과 같은 경우에 가장 적합합니다:

  • 사용자 기반에 iOS 기기가 상당 비중을 차지할 때
  • 결제 또는 주소 입력 과정에서 이탈이 관찰될 때
  • 원시 카드 데이터를 직접 처리하지 않고 카드 결제를 지원하고자 할 때

다른 지갑이나 전통적인 카드 폼과 병행해서 제공해야 하며, Apple Pay가 없는 사용자도 결제할 수 있도록 해야 합니다.

Apple Pay가 내부적으로 동작하는 방식

Apple Pay는 단순한 “더블 클릭으로 결제” 경험 뒤에 많은 복잡성을 숨깁니다. 내부적으로는 여러 주체와 보안 계층이 조율되어 안전하게 자금이 이동합니다.

주요 참여자

일반적인 Apple Pay 거래에는 다음이 포함됩니다:

  • 사용자: 기기와 카드를 소유한 사람
  • 발급 은행: 사용자의 결제카드를 발급한 은행
  • 카드 네트워크: Visa, Mastercard, Amex 등
  • Apple: Wallet, 기기 보안 및 토큰화 인프라 제공자
  • 가맹점: 결제를 수락하는 앱 또는 비즈니스
  • PSP / 결제 게이트웨이 / 어큐러: 가맹점을 대신해 결제를 처리하고 카드 네트워크에 연결하는 주체

토큰화: DPAN 대 FPAN

사용자가 카드를 Apple Wallet에 추가하면 실제 카드 번호(FPAN, Funding Primary Account Number)는 카드 네트워크와 발급사로 안전하게 전송됩니다. 그들은 기기용 DPAN(Device Primary Account Number)과 해당 기기에 고유한 암호 키를 응답합니다.

Apple Pay 거래에서는 DPAN을 사용합니다. 앱과 백엔드는 FPAN을 보지 않습니다. 이 것이 Apple Pay 토큰화 모델의 핵심입니다: 기기는 대체 카드 번호와 일회성 크립토그램을 사용해 실제 카드를 노출하지 않습니다.

Secure Element와 결제 토큰 생성

지원되는 기기에서는 결제 자격 증명과 키가 Secure Element(또는 Secure Enclave로 보호됨)에 저장됩니다. 사용자가 인증하면(Face ID, Touch ID, 또는 암호), Secure Element는:

  1. DPAN과 고유 키를 사용해 결제 크립토그램을 생성합니다.
  2. 다음을 포함한 Apple Pay 결제 토큰을 조립합니다:
    • DPAN
    • 거래별 크립토그램
    • 기타 메타데이터(만료, 네트워크 등)
  3. 이 토큰을 결제 처리자(PSP)의 공개키로 암호화합니다.

앱은 Apple Pay API를 통해 이 불투명하고 암호화된 토큰을 받고 이를 백엔드로 전달하면 백엔드가 PSP나 게이트웨이로 전달합니다.

승인(Authorization)과 정산(Settlement)

PSP는 토큰을 복호화해 DPAN과 크립토그램을 추출하고 카드 네트워크를 통해 발급 은행으로 승인 요청을 제출합니다. 발급사는 크립토그램과 카드 상태를 검증한 뒤 승인 또는 거절을 반환합니다.

이후 정산 단계에서 승인된 금액이 캡처되고 배치되어 발급 은행에서 가맹점의 어큐러로 이동합니다. 앱 입장에서는 단지 캡처 또는 판매 완료로 보이지만 내부적으로는 어큐러, 카드 네트워크, 발급사 간에 DPAN을 사용해 조정됩니다—실제 카드 번호는 사용되지 않습니다.

Apple Pay 사용을 위한 요건과 전제 조건

앱에 Apple Pay를 추가하기 전에 기술적·비즈니스적·지역적 요구사항을 충족해야 합니다.

Apple 계정 및 식별자

가맹점 측에서는 다음이 필요합니다:

  • 활성화된 Apple Developer Program 계정(유료)
  • Xcode에서 Apple Pay 기능이 활성화된 App ID
  • 최소 하나의 Apple Pay Merchant ID
  • 해당 Merchant ID에 연동된 Payment Processing 인증서

많은 가맹점은 웹 기반 또는 하이브리드 플로우에서 사용되는 가맹점 검증을 위해 Merchant Identity 인증서를 추가로 생성합니다.

지원 플랫폼 및 OS 버전

인앱 Apple Pay는 다음에서 지원됩니다:

  • Touch ID 또는 Face ID가 있는 iOS 및 iPadOS 기기, 또는 페어링된 Apple Watch
  • 최신 OS 버전(일반적인 권장으로 iOS 12+를 대상으로 하되 새 API에 의존하는 경우 Apple 문서를 확인)

최신 API를 사용하는 경우 최소 지원 OS를 Apple 문서에서 확인하세요.

지역 및 은행 가용성

Apple Pay는 모든 국가 또는 은행에서 지원되지 않습니다. 다음을 확인하세요:

  • 판매 지역에서 Apple Pay가 지원되는지
  • 해당 지역에서 수락하는 주요 카드 네트워크(Visa, Mastercard, Amex 등)가 Apple Pay를 지원하는지
  • 귀하의 어큐러리 은행 또는 PSP가 해당 시장에서 Apple Pay 거래를 처리할 수 있는지

가맹점 카테고리 및 허용 상품

Apple은 특정 가맹점 카테고리 및 사용 사례(불법 상품, 일부 디지털 콘텐츠/서비스, 고위험 업종 등)를 제한할 수 있습니다. 다음을 확인하세요:

  • 귀하의 MCC(가맹점 분류 코드)가 Apple Pay에 허용되는지
  • 앱의 제품 및 서비스가 App Store 심사 가이드라인 및 Apple Pay 약관을 준수하는지

결제 서비스 제공자 및 게이트웨이 지원

결국 Apple Pay 토큰화와 복호화를 지원하는 PSP/게이트웨이가 필요합니다. 공급자에게 다음을 확인하세요:

  • 결제 토큰 복호화에 필요한 키를 제공하는지(또는 대신 복호화해 주는지)
  • 귀하의 통화와 지역을 지원하는지
  • Apple Pay 통합을 위한 명확한 문서와 SDK를 제공하는지

모바일 앱에서의 Apple Pay 사용자 경험 흐름

원활한 Apple Pay 흐름은 사용자에게 거의 보이지 않는 경험을 제공합니다. 일반적인 단계는 다음과 같습니다.

1. 상품 페이지에서 Apple Pay 버튼까지

여정은 일반적으로 상품 페이지나 장바구니 화면에서 시작됩니다. 사용자가 옵션(사이즈, 색상, 수량)을 선택하면 체크아웃으로 이동합니다.

체크아웃 또는 장바구니 화면에서 Apple이 제공하는 표준 Apple Pay 버튼을 표시하세요. 버튼은:

  • 공식 “Pay” 마크를 사용해야 합니다(예: “Apple로 결제” 같은 커스텀 텍스트 금지).
  • 주요 결제 액션 근처에 눈에 띄게 배치하세요.
  • 전체 장바구니 또는 특정 항목에 대한 결제인지 표시하세요.

2. Apple Pay 시트

사용자가 버튼을 누르면 Apple Pay 시트가 화면 하단에서 올라옵니다.

이 시트에는 보통 다음이 포함됩니다:

  • 결제 카드: 기본 카드가 선택되어 있으며 카드 전환 옵션이 있음
  • 배송 상세: 물품 배송이 있는 경우 주소 선택 또는 확인
  • 연락처 정보: 이름, 이메일, 전화번호(필요 시 편집 가능)
  • 요약: 품목 목록(선택적)과 세금 및 배송비가 포함된 명확한 총액

사용자는 확인 전에 시트에서 카드, 배송지, 연락처 등을 조정할 수 있습니다.

3. 인증

결제를 승인하려면 사용자는 다음으로 인증합니다:

  • Face ID(기기에서 얼굴 보기)
  • Touch ID(지문 센서)
  • 기기 암호(생체인증 실패 시 대체 수단)

시트는 예: Face ID 기기에서 “더블클릭하여 결제”와 같이 명확히 안내합니다.

4. 성공, 실패 및 취소 상태

인증 후 시트는 진행 상태를 표시하고 사라져 앱으로 돌아갑니다.

앱은 즉시 명확한 상태를 보여줘야 합니다:

  • 성공: 주문 번호, 요약 및 다음 단계(배송 추적, 다운로드 등)를 포함한 “결제 확인” 메시지
  • 실패: 간단한 오류 메시지(예: “결제가 거부되었습니다”)와 다른 카드 또는 결제 방법을 제시
  • 취소: 사용자가 시트에서 취소한 경우 중립 메시지(예: “결제가 완료되지 않았습니다”)를 보여주고 장바구니 데이터는 유지

이 상태들을 명확하고 일관되게 유지하면 사용자가 결제 상태를 명확히 이해하고 흐름에서 통제감을 느끼게 됩니다.

iOS에서 Apple Pay 핵심 구현 단계

iOS에서 Apple Pay 구현은 PassKit 프레임워크와 몇 가지 핵심 클래스 중심입니다. 앱 수준의 엔드투엔드 흐름은 다음과 같습니다.

1. Xcode에서 Apple Pay 활성화

  1. Xcode에서 대상(Target)의 Signing & Capabilities를 엽니다.
  2. + Capability를 클릭하고 Apple Pay를 추가합니다.
  3. Apple Developer 포털에서 만든 Merchant ID를 선택(또는 필요 시 생성)합니다.

이로써 앱 번들이 가맹점 식별자와 연결되어 Apple Pay 토큰을 서버용으로 생성할 수 있게 됩니다.

2. PassKit을 임포트하고 PKPaymentRequest 생성

import PassKit

func createPaymentRequest() -> PKPaymentRequest? {
    guard PKPaymentAuthorizationController.canMakePayments() else { return nil }

    let request = PKPaymentRequest()
    request.merchantIdentifier = "merchant.com.yourcompany.app"
    request.countryCode = "US"
    request.currencyCode = "USD"

    request.supportedNetworks = [.visa, .masterCard, .amex]
    request.merchantCapabilities = [.capability3DS]

    request.paymentSummaryItems = [
        PKPaymentSummaryItem(label: "Pro Subscription", amount: 9.99),
        PKPaymentSummaryItem(label: "Your Company", amount: 9.99)
    ]

    return request
}

merchantIdentifier, countryCode, currencyCode는 가맹점 설정과 일치해야 합니다. supportedNetworks는 귀사와 PSP가 지원하는 카드 스킴을 반영합니다. 최소한 merchantCapabilities.capability3DS를 포함하세요.

3. PKPaymentButton 추가 및 배치

Apple의 UI 가이드라인을 준수하려면 커스텀 버튼 대신 PKPaymentButton을 사용하세요:

let payButton = PKPaymentButton(paymentButtonType: .buy, paymentButtonStyle: .black)

제품 화면, 장바구니, 최종 체크아웃 등 구매 의도가 가장 강한 곳에 배치하세요. PKPaymentAuthorizationController.canMakePayments()false면 버튼을 비활성화하거나 숨기세요.

4. PKPaymentAuthorizationController 표시 및 콜백 처리

요청으로 컨트롤러를 생성하고 PKPaymentAuthorizationControllerDelegate를 구현하세요:

func startApplePay() {
    guard let request = createPaymentRequest() else { return }
    let controller = PKPaymentAuthorizationController(paymentRequest: request)
    controller.delegate = self
    controller.present(completion: nil)
}

extension CheckoutViewController: PKPaymentAuthorizationControllerDelegate {
    func paymentAuthorizationController(_ controller: PKPaymentAuthorizationController,
                                        didAuthorizePayment payment: PKPayment,
                                        handler completion: @escaping (PKPaymentAuthorizationResult) -> Void) {
        // Send payment.token to your server for processing
        // Then call completion(.init(status: .success, errors: nil)) or .failure
    }

    func paymentAuthorizationControllerDidFinish(_ controller: PKPaymentAuthorizationController) {
        controller.dismiss(completion: nil)
    }
}

didAuthorizePayment 메서드에서 payment.token을 실제 과금 처리용 서버로 전달합니다. 서버가 응답하면 .success 또는 .failure로 완료하고 paymentAuthorizationControllerDidFinish에서 시트를 닫습니다.

서버 측 처리 및 결제 프로세싱

안전하게 배포하고 테스트
앱과 백엔드를 배포한 뒤 스냅샷과 롤백으로 변경사항을 테스트할 때 안전하게 반복하세요.

서버 로직은 Apple Pay 시트를 실제 금전 이동으로 바꾸는 역할을 합니다. 앱은 사용자 인증을 수집하고, 백엔드는 가맹점 유효성 검사, 토큰 처리 및 결제 게이트웨이와의 통신을 담당합니다.

가맹점 검증 및 가맹점 세션

Apple Pay 시트를 표시하기 전에 앱은 Apple로부터 가맹점 세션을 받아야 합니다.

  1. 앱이 PKPaymentAuthorizationController에서 제공한 merchant validation URL을 백엔드로 전송합니다.
  2. 서버가 가맹점 ID와 인증서를 사용해 Apple의 merchant validation 엔드포인트를 호출합니다.
  3. Apple이 서명된 merchant 세션 객체를 반환합니다.
  4. 백엔드가 이 세션을 앱으로 전달하면 앱은 이를 사용해 Apple Pay를 초기화합니다.

이 흐름은 앱이 귀하의 가맹점 ID와 도메인에 연관되어 있음을 Apple에게 증명합니다.

결제 토큰 처리

사용자가 결제를 승인하면 앱은 암호화된 결제 토큰(PKPaymentToken)을 받고 이를 HTTPS로 백엔드에 전송합니다.

서버에서는:

  • 토큰을 직접 복호화하려 하지 마세요.
  • 토큰을 있는 그대로 Apple Pay를 지원하는 결제 게이트웨이(Stripe, Adyen, Braintree 등)로 전달하세요.

게이트웨이는 토큰을 복호화(네트워크 토큰 또는 DPAN 사용)하고 카드 네트워크로 카드 승인을 실행합니다.

승인 대 캡처

게이트웨이는 일반적으로 두 가지 흐름을 제공합니다:

  • Authorize only: 자금을 예약하고 이후(예: 배송 후) 캡처함. 물리 상품이나 가변 총액에 유용.
  • Authorize and capture: 즉시 청구. 디지털 상품이나 즉시 시작되는 구독에 일반적.

백엔드는 게이트웨이의 트랜잭션 ID, 금액, 통화 및 상태를 저장해야 하지만 원시 카드 데이터나 복호화된 토큰 내용은 저장하지 마세요.

데이터 저장 및 보안

정산, 환불 및 고객 지원에 실제로 필요한 정보만 저장하세요:

  • 주문 ID 및 결제 트랜잭션 ID
  • 게이트웨이가 제공한 마스킹된 카드 정보 및 브랜드
  • 승인/캡처 타임스탬프와 금액

전체 카드 번호, CVV, 또는 암호화되지 않은 결제 토큰을 서버에 절대 저장하지 마세요. 민감한 처리는 PCI 준수 게이트웨이에 위임하고 통신은 모두 TLS로 보호하며 엄격한 로깅 및 접근 제어를 적용하세요.

보안, 프라이버시 및 컴플라이언스 고려사항

Apple Pay는 앱이 원시 카드 번호에 접근하지 않도록 설계되었지만 보안 모델과 귀사의 책임을 이해하는 것이 중요합니다.

토큰화: 실제 카드 번호 숨기기

사용자가 카드를 Apple Pay에 추가하면 발급사와 네트워크는 실제 PAN(카드 번호)을 기기 계정 번호(DAN)로 대체합니다.

결제 시:

  • DAN과 일회성 크립토그램이 실제 카드 번호 대신 전송됩니다.
  • 크립토그램은 거래별로 고유하며 가로채더라도 재사용할 수 없습니다.

앱과 백엔드는 토큰과 거래 메타데이터만 보며 기본 카드 세부 정보는 보지 못합니다.

기기 수준 보호: Secure Enclave와 생체인증

민감한 키와 결제 자격 증명은 Secure Enclave에 하드웨어 수준으로 격리되어 저장·처리됩니다.

인증은 사용자 확인에 연결됩니다:

  • Face ID / Touch ID
  • 또는 기기 암호

앱은 단지 시스템 시트로부터 성공 또는 실패 신호만 받고 생체데이터나 Secure Enclave 내용을 액세스하지 않습니다.

네트워크 보호 및 일회성 크립토그램

각 Apple Pay 거래는 다음을 사용합니다:

  • 거래별 크립토그램
  • 가맹점 및 기기별 데이터

네트워크와 발급사는 이러한 값을 검증해 클론, 재생·재전송 공격 및 변조를 탐지합니다.

PCI DSS 범위(고수준, 법적 조언 아님)

Apple Pay는 앱의 PCI DSS 범위를 상당히 줄일 수 있습니다. 이유:

  • 귀하는 PAN을 수집, 전송, 저장하지 않습니다.
  • 대부분의 민감한 처리는 Apple, 네트워크, PSP에 위임됩니다.

하지만:

  • 결제 토큰 및 관련 데이터 처리 방식에 대한 책임은 여전히 귀하에게 있습니다.
  • PSP와 게이트웨이는 PCI 준수여야 합니다.

정식 지침은 어큐러, PSP 및 적격 보안 평가사(QSA)와 상의하세요.

API, 로그 및 오류 메시지 보호

Apple Pay는 위험을 줄이지만 부주의한 통합은 노출을 다시 초래할 수 있습니다.

실용적인 팁:

  • 원시 결제 토큰, 복호화된 페이로드 또는 전체 PAN을 로그에 남기지 마세요.
  • 로그와 분석에서는 카드 번호 또는 DAN의 마지막 4자리만 마스킹하세요.
  • 크래시 리포트에서 결제 토큰과 고객 식별자를 제거하세요.
  • 모든 곳에서 TLS를 사용(웹 백엔드에서 HSTS, 적절한 곳에 인증서 고정)하세요.
  • 결제 토큰을 비밀로 취급: 짧은 TTL, 필요한 경우에만 저장, 저장 시 암호화, 엄격한 IAM 규칙으로 접근 제한.
  • 사용자에게는 일반화된 오류 메시지를, 엔지니어용으로는 기술 상세를 안전한 로그에 저장하세요.

이 경계를 지키면 Apple Pay의 내장 보호 기능을 활용하면서 컴플라이언스 부담을 관리할 수 있습니다.

Apple Pay 테스트: 샌드박스, 시나리오 및 디버깅

철저한 테스트는 Apple Pay 통합이 실제 고객에게 올바르게 동작함을 확신하는 유일한 방법입니다. 올바른 샌드박스 설정과 테스트 계획이 필요합니다.

샌드박스 테스터 및 테스트 카드 설정

Apple Developer / App Store Connect에서 Users and Access → Sandbox에 샌드박스 테스트 계정을 생성하세요. 이 특수 Apple ID들은 테스트 기기에서 실제 카드 과금 없이 시뮬레이션할 때 사용됩니다.

테스트 기기에서:

  • 일반 Apple ID에서 로그아웃
  • 샌드박스 Apple ID로 App Store에 로그인
  • Apple 문서(또는 결제 게이트웨이)가 제공하는 테스트 카드 번호로 Wallet에 카드 추가(지역별 테스트 카드 정보 존재)

지역·통화·카드 스킴이 다른 다양한 샌드박스 테스터를 사용해 엣지 케이스를 재현하세요.

시뮬레이터 대 물리 기기에서의 테스트

iOS 시뮬레이터는 기본적인 Apple Pay 테스트를 지원해 UI 검증과 초기 개발에 유용합니다. 인증을 시뮬레이트하고 PKPaymentAuthorizationController 흐름을 확인할 수 있습니다.

다만 실제 기기에서만 제공되는 다음을 항상 검증하세요:

  • 실제 Wallet 설정 흐름
  • Face ID / Touch ID / 암호 UX
  • 기기별 동작(네트워크 신뢰성, OS 레벨 프롬프트 등)

시뮬레이터는 편의 기능일 뿐 대체 수단이 아닙니다.

핵심 테스트 시나리오

클라이언트와 서버를 포함한 엔드투엔드 흐름에서 최소 다음을 커버하세요:

  • 성공적인 승인 및 캡처
  • 카드 거부(잔액 부족, 일반 거부, 유효하지 않은 카드)
  • 타임아웃/네트워크 실패(클라이언트 및 게이트웨이 측)
  • 사용자 취소(시트 표시 중, 생체인증 중, 배송/연락처 선택 중 등 다양한 단계)
  • 부분 승인 또는 금액 변경(팁, 조정 등 게이트웨이가 지원하는 경우)

거부 및 오류 코드를 유도할 수 있는 게이트웨이별 테스트 카드 번호와 트리거를 사용하세요.

안전한 로깅 및 디버깅

문제 추적을 위해 충분히 로그를 남기되 민감한 결제 데이터를 절대 기록하지 마세요. 피해야 할 항목:

  • PAN(카드 번호), 만료일, CVC
  • 전체 청구/배송 주소
  • Apple Pay 결제 토큰 또는 복호화된 페이로드

대신 기록할 항목:

  • 내부 주문 ID와 Apple Pay 트랜잭션 식별자
  • 게이트웨이 응답 코드 및 오류 메시지
  • 선택된 배송 방법, 국가, 통화(필요한 경우)
  • 높은 수준의 결제 상태 전이(예: created → authorized → captured → failed)

앱에서 백엔드로 전달되는 상관 ID를 통해 클라이언트 로그와 서버 로그를 연결하세요.

테스트 중 모니터링

테스트를 실행할 때 다음을 주시하세요:

  • 테스트 결제, 거부 및 오류 비율에 대한 게이트웨이 대시보드
  • Apple Pay 및 관련 서비스의 Apple 시스템 상태 페이지

간헐적 오류나 느린 승인 문제가 보이면 통합 버그로 가정하기 전에 게이트웨이와 Apple 상태를 먼저 확인하세요. 일시적 플랫폼 문제를 코드 버그로 오인하는 시간을 줄일 수 있습니다.

전환을 극대화하기 위한 디자인 및 UX 모범 사례

Apple Pay UI 생성
PKPaymentButton과 전체 Apple Pay 시트 흐름이 포함된 작동하는 iOS 결제 화면을 만드세요.

신중한 Apple Pay 디자인은 “있으면 좋은 기능”을 주력 전환 드라이버로 바꿀 수 있습니다. 버튼 배치와 문구의 작은 결정이 사용 빈도에 큰 영향을 줍니다.

Apple Pay 버튼 배치 위치

구매 의도가 강한 위치에 사용하세요:

  • 결제 단계의 주요 위치: 다른 결제수단과 시각적으로 그룹화하되 눈에 띄게 하세요.
  • 위쪽(above the fold): 스크롤하지 않아도 보이도록.
  • 모바일에서의 고정 액션 바: 적절한 경우 하단 고정 바에 Apple Pay를 주요 버튼으로 배치.

“결제 옵션 더보기” 등 추가 탭 뒤에 숨기지 마세요. 단계가 늘어날수록 사용 빈도는 떨어집니다.

Apple Pay를 익스프레스 체크아웃으로 사용

다음 위치에서 Apple Pay를 익스프레스 체크아웃으로 제공하세요:

  • 상품 페이지: 단품, 고려가 적은 구매에 이상적
  • 카트 화면: “Checkout” 옆에 Apple Pay를 배치해 계정/폼 단계를 건너뛸 수 있게 함

익스프레스 체크아웃으로 제공할 때는 배송 및 연락처 처리 방식이 Apple Pay 인증 중에 이루어짐을 명확히 하세요.

버튼 문구, 브랜딩 및 사이징

Apple의 **Human Interface Guidelines(HIG)**을 따르세요:

  • 공식 Apple Pay 마크를 변경 없이 사용
  • 충분한 패딩을 확보하고 모바일에서는 엄지 도달 범위를 고려해 보통 전체 너비 버튼 사용
  • 버튼 근처에 명확한 보조 레이블(예: “Apple Pay로 즉시 결제”) 추가

비인증 색상이나 아이콘을 사용해 인지도를 떨어뜨리거나 브랜드 규칙을 위반하지 마세요.

사전 채워진 데이터로 단계 최소화

Apple Pay의 도움을 받아 마찰을 줄이세요:

  • Apple Pay 토큰에서 배송 주소, 이메일, 전화를 가져와 적용
  • 진짜로 필요한 추가 정보(예: 배송 메모)는 인증 후에 요청하고 가능하면 선택사항으로 유지
  • 선택한 옵션(배송 방법, 프로모 코드)을 저장해 재방문 시 반복 입력을 줄임

목표는 한 번의 결정적 탭으로 결제 완료하는 것입니다.

오류 처리 및 우아한 복구

혼란스러운 실패 상태는 판매 손실로 바로 이어집니다. 오류 처리 계획:

  • 일상 언어 메시지: “Apple Pay 결제를 완료할 수 없습니다. 고객님의 카드는 청구되지 않았습니다.”
  • 실행 가능한 다음 단계: “다른 카드를 시도하거나 다른 결제 방법을 선택해 주세요.”
  • 비파괴적 설계: 장바구니 내용, 프로모 코드, 주소를 유지해 사용자가 재시도할 때 재작업이 없도록

오류 세부는 내부적으로 안전한 로그에 기록하고, 사용자에게는 이해하기 쉬운 수준의 정보만 제공하세요.

일반적인 문제와 해결 방법

구성(설정) 관련 문제

대부분의 Apple Pay 문제는 구성 오류에서 시작됩니다.

우선 코드에서 사용하는 merchant ID가 Apple Developer 계정의 것과 정확히 일치하는지 확인하세요. 한 문자라도 틀리면(또는 샌드박스 merchant ID를 프로덕션에서 사용하면) 흐름이 깨집니다.

다음으로 엔타이틀먼트와 기능을 확인하세요:

  • 앱 타깃에서 Apple Pay가 활성화되어 있는가
  • 앱 엔타이틀먼트에 올바른 merchant ID들이 추가되어 있는가
  • Payment Processing Certificate가 생성되어 만료되지 않았는가

Apple Pay 버튼이 보이지 않거나 시트가 표시되지 않으면 구성 오류를 의심하세요.

지역, 카드 네트워크 및 기기 호환성

Apple Pay는 일부 국가·발급사·기기에서 제한될 수 있습니다.

버튼을 표시하기 전에 PKPaymentAuthorizationController.canMakePayments()canMakePayments(usingNetworks:)를 사용하세요. false이면 버튼을 숨기고 대체 결제수단과 함께 명확한 설명을 제공하세요.

사용자가 카드가 “지원되지 않음”이라고 보고할 때 확인할 항목:

  • 발급 은행이 Apple Pay를 지원하는지
  • 사용자가 사용하는 카드 네트워크(예: Amex)가 설정에서 허용되어 있는지

가맹점 검증 실패

가맹점 검증 실패는 보통 Apple Pay 시트가 금방 닫히거나 아예 나타나지 않는 증상으로 드러납니다.

네이티브 앱의 경우 주된 원인은:

  • 앱 번들 ID와 연결되지 않은 merchant ID 사용
  • 만료되었거나 없는 Payment Processing 인증서
  • 게이트웨이의 잘못된 Apple Pay 설정

서버 또는 검증 엔드포인트에서 로그에 다음을 남기세요:

  • 들어오는 merchant identifier
  • 환경(샌드박스 vs 프로덕션)
  • Apple 또는 게이트웨이에서 반환한 상세 오류

대부분의 경우 로그가 잘못 구성된 항목을 바로 가리킵니다.

거래 거부 및 사용자 대상 오류

모든 실패가 기술적인 것은 아닙니다. 많은 경우가 발급사 거부입니다.

게이트웨이 또는 프로세서의 응답을 항상 확인하세요. 구분해야 할 항목:

  • 토큰 복호화 실패, 잘못된 요청 같은 기술적 오류
  • 잔액 부족, 의심스러운 거래, 카드 미지원 같은 금융적 거부

사용자에게는 다음과 같은 친절한 메시지로 매핑하세요:

  • “귀하의 은행에서 결제를 거부했습니다. 다른 카드를 시도하거나 은행에 문의하세요.”
  • “결제 처리 중 문제가 발생했습니다. 다시 시도해 주세요.”

원시 게이트웨이 오류 코드나 불필요한 기술 정보를 사용자에게 노출하지 마세요.

운영 중 로그 및 게이트웨이 응답 모니터링

운영 환경에서 Apple Pay의 안정성을 유지하려면 모든 결제 시도에 대해 구조화된 로깅이 필요합니다:

  • 타임스탬프, 환경, merchant ID, 기기 정보
  • 잘라낸(Truncated) 결제 토큰 식별자(전체 PAN 데이터 절대 아님)
  • 게이트웨이 요청 ID 및 응답 코드

거부, 가맹점 검증 오류, 타임아웃 급증에 대한 대시보드와 알림을 설정하세요. 클라이언트 이벤트와 서버 로그를 상관시켜 문제가 어디서 발생하는지 빠르게 추적할 수 있게 하세요.

이러한 관찰 가능성은 라이브 트래픽에서 문제 발생 시 디버깅 시간을 크게 단축합니다.

Apple Pay의 성과 및 영향 측정

Flutter에 Apple Pay 추가
화면을 다시 작성하지 않고 Flutter 모바일 앱에 Apple Pay를 다른 결제 수단과 함께 추가하세요.

Apple Pay를 앱에 도입한 후에는 실제로 체크아웃을 개선하는지 입증해야 합니다. 이를 위해 적절한 이벤트를 추적하고 핵심 지표를 모니터링하며 체계적인 실험을 수행하세요.

Apple Pay 관련 추적 이벤트

명확한 퍼널을 만들고 각 단계에서 이벤트를 기록하세요:

  • Apple Pay 시트 표시됨 – 사용자가 Apple Pay 버튼을 눌러 시트가 표시됨
  • 시트 취소됨 – 사용자가 Apple Pay 시트를 닫음
  • 승인 실패 – Touch ID/Face ID/암호 실패 또는 사용자의 거부
  • 결제 승인됨 – Apple Pay가 유효한 결제 토큰을 앱에 반환함
  • 결제 캡처됨 – 서버가 결제를 성공적으로 청구함

이벤트와 함께 다음과 같은 컨텍스트를 연결하세요:

  • 버튼이 눌린 위치(상품 화면, 카트, 체크아웃)
  • 플랫폼 및 OS 버전
  • 신규 vs 재방문 고객

이를 통해 사용자가 어디서 이탈하는지, UX 관련(취소)인지 기술적(승인 실패)인지 또는 백엔드 문제(캡처 실패)인지 구분할 수 있습니다.

모니터링할 핵심 지표

초점이 분명한 지표 세트는 영향을 판단하기 쉽게 합니다:

  • Apple Pay 채택률 – Apple Pay 체크아웃 ÷ 모든 사용 가능한 체크아웃
  • Apple Pay 성공률 – 성공적으로 캡처된 거래 ÷ Apple Pay 시도 수
  • 지불까지 소요 시간 – 시트 표시부터 결제 캡처까지의 중앙값
  • 평균 주문 금액(AOV) – Apple Pay vs 다른 결제수단 비교
  • 체크아웃 완료율 – Apple Pay를 본 사용자 그룹 vs 보지 못한 그룹

버전별·시간별로 추적해 Apple Pay 통합 및 UX 개선이 지표를 향상시키는지 확인하세요.

Apple Pay 배치 및 메시지에 대한 A/B 테스트

다양한 실험을 진행해 Apple Pay의 효과를 최적화하세요:

  • 배치: 상품 페이지, 카트, 메인 체크아웃 화면 중 어디에 두는가
  • 우선순위: Apple Pay를 기본 CTA로 둘 것인지 대안 옵션으로 둘 것인지
  • 카피: 짧은 라벨(“Buy with Apple Pay”) vs 명확한 가치 제안(“Fast checkout with Apple Pay”) 비교
  • 기본값: 적격 사용자에 대해 Apple Pay를 기본 선택으로 할 것인지 등

채택률, 성공률, 지불까지 소요 시간, 전환율 변화를 측정하세요. 작은 레이아웃 변화도 의미 있는 개선을 가져올 수 있습니다.

분석 및 프라이버시 고려사항

Apple Pay의 프라이버시 보장과 규제를 존중하면서 분석을 통합하세요:

  • 이벤트 종류와 결과만 기록하고 원시 카드 데이터나 계좌 번호는 기록하지 마세요.
  • 즉시 처리에 필요한 경우를 제외하고 결제 토큰을 저장하지 마세요.
  • 가능하면 직접 식별자 대신 가명화된 식별자(앱 사용자 ID 등) 사용
  • 분석 도구에 민감 필드를 마스킹하거나 제외하도록 구성하고 개인정보 처리방침에 수집 내용을 문서화

Mixpanel, Amplitude, Firebase 같은 주요 분석 플랫폼은 민감 결제 상세를 제외한 Apple Pay 이벤트를 다룰 수 있습니다.

Apple Pay 데이터를 사용해 전체 체크아웃 개선

Apple Pay에서 얻은 인사이트는 단일 버튼을 넘어 전체 체크아웃을 개선하는 데 활용할 수 있습니다:

  • Apple Pay 사용자가 더 높은 완료율과 더 짧은 지불 시간을 보인다면 이를 카드·지갑 흐름의 벤치마크로 삼으세요.
  • Apple Pay 채택이 모바일에서는 높고 태블릿에서 낮다면 기기별 레이아웃과 노출도를 재검토하세요.
  • Apple Pay 시트에서 취소가 급증한다면 시트 이전 화면(가격 명확성, 배송정보, 총액)을 개선하세요.

시간이 지나면 이런 측정은 Apple Pay뿐 아니라 전체 체크아웃 경험을 빠르고 명확하며 신뢰할 수 있게 다듬는 데 도움을 줍니다.

크로스플랫폼 및 다채널 고려사항

Apple Pay 지원은 보통 단일 iOS 앱에서 끝나지 않습니다. 사용자들은 디바이스와 채널을 넘나들며 동일한 결제 경험을 기대하므로 구현 선택은 이를 반영해야 합니다.

네이티브 iOS 대 웹의 Apple Pay

네이티브 앱PKPaymentAuthorizationController를 사용해 결제 토큰을 백엔드로 직접 전달합니다. 장점:

  • UI 제어가 용이
  • 앱 상태(장바구니, 로그인 사용자, 오퍼)와의 긴밀한 통합

**웹의 Apple Pay(Safari)**는 자바스크립트와 Payment Request API를 사용합니다. 웹 체크아웃이 이미 있거나 데스크톱과 모바일 Safari 모두에서 Apple Pay를 제공하려면 적합합니다.

많은 팀은 앱 내 네이티브 Apple Pay와 웹의 Apple Pay를 모두 지원하되 백엔드 결제 파이프라인은 공유하는 접근을 선택합니다.

다른 지갑과의 일관성

Google Pay, PayPal 등 다른 지갑도 지원한다면 높은 수준의 흐름을 정렬하세요:

  • 모든 지갑을 동일한 의사결정 지점에서 제시
  • 명칭, 버튼 위치, 오류 패턴을 일관되게 유지
  • 국가별·최소 주문 금액 같은 비즈니스 규칙을 일관되게 적용

이렇게 하면 기기와 결제수단을 바꿔도 사용성이 크게 달라지지 않습니다.

크로스플랫폼 프레임워크와 기기

React Native, Flutter 등에서는 일반적으로:

  • 네이티브 Apple Pay API를 래핑하는 공식 또는 커뮤니티 플러그인을 사용
  • 플랫폼별 작은 모듈을 호출하는 공통 비즈니스 레이어 유지

iPhone, iPad, Apple Watch에서 테스트하세요:

  • 지원 네트워크와 배송 옵션이 동일한지 확인
  • 각 기기에서 버튼 스타일과 라벨이 Apple 가이드라인을 따르는지 확인

iOS, 웹, 기타 플랫폼에 걸쳐 단일 디자인 시스템과 체크아웃 로직을 유지하고 채널별로 얇은 통합 계층을 두는 것이 권장됩니다.

Apple Pay 유지·보수 및 미래 대비

Apple Pay를 건강하게 유지하는 것은 대규모 리팩토링보다 규율 있는 유지보수에 가깝습니다.

인증서, 키 및 OS 버전

Apple Pay는 만료되는 merchant ID와 Payment Processing 인증서에 의존합니다.

소유권 맵을 만들고 누가 Apple Developer 계정을 관리하는지, 인증서가 CI/CD 및 서버 어디에 저장되는지, 어떻게 사용되는지 문서화하세요.

그런 다음:

  • 만료 90/60/30일 전에 캘린더 알림 설정
  • 인증서 만료 임박 시 빌드를 실패시키는 CI 체크 스크립트 작성

주요 iOS 릴리스마다 베타와 정식 빌드에서 Apple Pay 플로우를 테스트하세요. 특히:

  • 시트 표시와 문구
  • 지원 네트워크
  • 3D Secure 및 생체인증 같은 엣지 케이스

Apple 가이드라인과의 동기화 유지

다음 자료들을 모니터링하세요:

  • Apple의 Human Interface Guidelines(HIG) — Apple Pay 버튼, 라벨, 카피 관련
  • 개발자 문서 및 WWDC 세션 — 필수 필드, 토큰, 기능 변경사항

연 1회 이상 디자인 리뷰를 계획해 최신 가이드라인과 접근성 요건에 맞추세요.

네트워크, 통화 및 지역 변화 대응

카드 네트워크, 통화 및 지원 지역은 시간이 지나며 변경됩니다. 다음을 구성 가능하게 만드세요:

  • 서버 사이드 구성으로 지원 네트워크, 국가, 통화를 구동
  • 네트워크/지역별 거부율 로그를 수집해 새 옵션을 활성화할 필요가 있는지 감지

게이트웨이가 새로운 네트워크나 지역 결제를 추가할 때 조정하고 PKPaymentRequest를 업데이트하세요.

안전한 마이그레이션 및 리팩터링

게이트웨이 변경, 앱 구조 개편, 토큰 포맷 업데이트 시에는:

  • 기능 플래그로 구버전과 신버전 경로를 병행 운영
  • 서버 측 결제 API를 멱등(idempotent)하게 설계해 재시도가 이중 과금을 유발하지 않도록
  • 단계적 롤아웃과 권한 지표(승인/거부율, 타임아웃) 모니터링

이 흐름을 문서화해 신규 팀원이 역공학 없이도 유지보수할 수 있게 하세요.

주목할 트렌드

네트워크의 토큰화 심화, Wallet 내 영수증·주문 업데이터 강화, 인앱·웹·오프라인 Apple Pay의 긴밀한 연계가 확산될 것입니다. Tap to Pay on iPhone과 지역별 금융 옵션 같은 기능이 계속 확대될 것으로 예상되므로, 통합을 구성 기반으로 설계해 핵심 흐름을 다시 구현하지 않고도 새로운 기능을 도입할 수 있게 하세요.

자주 묻는 질문

모바일 앱 맥락에서 Apple Pay는 무엇인가요?

Apple Pay는 사용자의 iPhone, iPad, Apple Watch 또는 Mac에 저장된 카드를 이용해 결제할 수 있게 해주는 애플의 디지털 월렛입니다.

모바일 앱에서는 수동으로 카드 정보를 입력하는 대신 Face ID, Touch ID 또는 기기 암호로 시스템 시트에서 결제를 확인합니다. 앱은 원시 카드 데이터 대신 암호화된 결제 토큰을 받아 백엔드와 결제 게이트웨이에 전송해 실제 결제를 완료합니다.

이로 인해 결제가 더 빨라지고 오류가 줄며 카드 번호가 앱 인프라에 남지 않습니다.

내 앱에 Apple Pay를 추가하는 것이 언제 적절한가요?

다음과 같은 경우 Apple Pay를 도입하는 것이 좋습니다:

  • 고객 중 상당수가 iOS 기기를 사용한다면
  • 카드 입력, 주소 입력 또는 최종 결제 단계에서 이탈이 발생한다면
  • 원시 PAN(카드 번호)을 직접 처리하지 않고 카드 결제를 지원하고 싶다면

Apple Pay는 카드, PayPal 등 기존 결제수단과 함께 제공하는 추가 옵션으로 가장 잘 작동합니다. 다른 결제수단을 완전히 대체하지 마세요; Apple Pay 이용이 불가능한 사용자도 결제할 수 있어야 합니다.

앱에서 Apple Pay를 사용하기 위한 전제 조건은 무엇인가요?

최소한 다음이 필요합니다:

  • 활성화된 Apple Developer Program 계정
  • Xcode에서 Apple Pay 기능이 활성화된 앱 타깃
  • Apple Pay용 Merchant ID
  • 해당 Merchant ID에 연결된 Payment Processing 인증서
  • Apple Pay를 지원하는 결제 게이트웨이/PSP(예: Stripe, Adyen, Braintree)

또한 Apple Pay가 지원되는 지역과 은행에서 운영해야 하며, 가맹점 카테고리 및 제품이 Apple 규정에 부합하는지 확인해야 합니다.

iOS 앱에서 Apple Pay를 구현하려면 어떻게 하나요(높은 수준에서)?

iOS에서의 높은 수준 절차는 다음과 같습니다:

  1. Xcode에서 Signing & Capabilities에 Apple Pay를 활성화하고 Merchant ID를 연결합니다.
  2. merchant identifier, country, currency, 지원 네트워크, summary items를 포함한 PKPaymentRequest를 만듭니다.
  3. 결제 의도가 있는 위치에 PKPaymentButton을 표시합니다.
  4. 요청과 함께 PKPaymentAuthorizationController를 표시합니다.
  5. didAuthorizePayment에서 payment.token을 서버로 전송하여 처리합니다.
  6. 서버 응답에 따라 .success 또는 .failure를 반환하고 시트를 닫습니다.

대부분의 생체인증, 토큰 생성 등은 시스템 UI가 처리합니다.

Apple Pay는 내 앱에서 카드 데이터를 어떻게 안전하게 보호하나요?

기기에서 생성되는 암호화된 결제 토큰에는 다음이 포함됩니다:

  • 실제 카드 번호(FPAN)가 아닌 기기별 카드 번호(DPAN)
  • 해당 거래에만 유효한 일회성 크립토그램

이 토큰은 결제 처리자(PSP)의 공개키로 암호화되어 전달되므로 앱과 백엔드는 이를 불투명한 블롭으로 취급합니다. 백엔드는 토큰을 게이트웨이에 전달하고, 게이트웨이는 이를 복호화해 카드 네트워크와 발급사에 승인을 요청한 뒤 성공 또는 실패를 반환합니다.

앱이나 서버는 실제 PAN이나 암호화 키를 보지 못합니다. 볼 수 있는 것은 거래 메타데이터와 상태뿐입니다.

서버는 Apple Pay 토큰을 어떻게 처리해야 하나요?

서버에서 해야 할 일은 다음과 같습니다:

  1. 앱에서 HTTPS로 전송한 Apple Pay 결제 토큰을 수신합니다.
  2. 해당 토큰을 Apple Pay를 지원하는 PSP/게이트웨이로 있는 그대로 전달합니다.
  3. 비즈니스 규칙에 따라 **승인(Authorize)**만 할지 또는 **승인 및 인출(Authorize and Capture)**을 할지 결정합니다.
  4. 주문 ID, 트랜잭션 ID, 마스킹된 카드 정보(가능한 경우), 금액, 타임스탬프 등 필요한 정보만 저장합니다.

토큰을 직접 복호화하려 하거나 장기 보관하지 마세요. 민감한 카드는 PCI 준수 게이트웨이에서 처리하게 하십시오.

Apple Pay 통합이 실패하거나 결제 시트가 표시되지 않는 이유는 무엇일까요?

주요 원인들은 다음과 같습니다:

  • 잘못된 merchant ID(오타, 잘못된 ID, 샌드박스 ID를 프로덕션에서 사용 등)
  • 앱의 Capability에 Apple Pay가 활성화되지 않았거나 엔타이틀먼트 누락
  • 만료되었거나 없는 Payment Processing 인증서
  • 사용자의 카드에 대해 지원되지 않는 지역 또는 네트워크
  • 서버에서의 merchant validation 실패(잘못된 인증서, 환경 불일치)

먼저 Apple Developer 포털, Xcode 엔타이틀먼트, 게이트웨이 설정을 확인하고 서버 로그에서 merchant validation 및 게이트웨이 오류 코드를 검사하세요.

실제 카드로 요금이 청구되지 않게 Apple Pay를 어떻게 테스트하나요?

안전하게 테스트하려면:

  • App Store Connect에서 Sandbox 테스트 계정을 생성합니다.
  • 테스트 기기에서 해당 샌드박스 Apple ID로 App Store에 로그인합니다.
  • Apple 또는 게이트웨이에서 제공하는 테스트 카드 번호로 Wallet에 테스트 카드를 추가합니다.
  • 성공 결제, 거부, 취소, 타임아웃 등 주요 흐름을 검사합니다.

Simulator는 빠른 UI 검증에 유용하지만 Wallet 설정, 생체인증 등 실제 동작은 물리 기기에서 꼭 확인하세요.

앱에서 Apple Pay의 UX 모범 사례는 무엇인가요?

전환율을 높이기 위한 권장 사항:

  • 카트/체크아웃 화면에서 **위쪽(above the fold)**에 Apple Pay 버튼을 배치하세요.
  • 상품 페이지나 카트에서 익스프레스 체크아웃으로 제공하세요.
  • PKPaymentButton을 공식 브랜딩 규칙에 맞게 사용하고 버튼 근처에 명확한 안내 문구(예: “Apple Pay로 즉시 결제”)를 추가하세요.
  • Apple Pay가 제공하는 배송지, 연락처 정보를 활용하고 정말 필요한 추가 정보만 요청하세요.
  • 실패 시에는 이해하기 쉬운 문구를 보여주고 카트를 그대로 유지해 재시도나 결제수단 변경을 쉽게 하세요.

이런 패턴은 마찰을 줄이고 Apple Pay를 빠르고 신뢰할 수 있는 경로로 느껴지게 합니다.

Apple Pay가 내 체크아웃 개선에 도움이 되는지 어떻게 측정하나요?

Apple Pay를 자체 퍼널로 추적하세요. 유용한 신호는 다음과 같습니다:

  • Apple Pay 채택률: Apple Pay 결제 수 ÷ 전체 사용 가능한 결제 수
  • 성공률: 성공적으로 캡처된 거래 ÷ Apple Pay 시도 수
  • 지불까지 소요 시간: 시트 표시부터 결제 캡처까지의 시간
  • 체크아웃 완료율: Apple Pay를 본 사용자 vs 보지 못한 사용자

버튼 위치와 문구에 대해 A/B 테스트를 진행하고 Apple Pay 사용자의 완료 및 취소율을 다른 결제수단과 비교하세요.

Related posts