첫 결제 받기: AI로 만든 앱에 진짜 돈을 더하되 그르치지 않는 법
AI로 만든 앱에 결제를 더하는 순간은 취미가 사업이 되는 순간입니다. 어떻게 생각해야 하는지 — AI 빌더에게 무엇을 맡기고, 무엇을 절대 직접 만들지 말며, 진짜 카드가 닿기 전에 어떻게 테스트하는지 — 알려 드립니다.
AI로 만든 앱이 장난감이기를 멈추고 사업이 되는 특정한 순간이 있습니다: 진짜 돈이 처음으로 그 안을 통과하는 때입니다. 그 전까지는 실수가 쌉니다. 깨진 버튼은 짜증 나는 정도입니다. 아무도 결제하지 않는 화면의 잘못된 합계는 오타입니다. 하지만 진짜 고객의 카드가 청구되는 날부터, 실수는 실제 돈을 — 당신 돈이든 그들 돈이든 — 잃게 하며, “AI가 그렇게 만들었어요”는 청구에 이의를 제기하는 사람에게 하고 싶은 말이 아닙니다.
좋은 소식: AI로 만든 앱에서 결제를 받는 일은 들리는 것보다 다가가기 쉽습니다. 단, 어떤 부분을 AI 빌더에게 맡기고 어떤 부분을 절대 직접 건드리지 말아야 하는지 안다면요. 이 글은 그 경계에 관한 안내입니다.
당신을 지켜 주는 단 하나의 규칙: 카드 번호를 절대 저장하지 마라
여기서 시작하세요. 다른 모든 것이 여기에 매달려 있으니까요. 당신의 앱은 절대로 원본 신용카드 번호를 보거나, 저장하거나, 다뤄서는 안 됩니다. 데이터베이스에도, 당신이 만든 폼에도, “그냥 잠깐”도 안 됩니다. 카드 데이터를 직접 다루면, 어떤 초보 메이커도 짊어져서는 안 될 법적·보안 의무가 무더기로 당신에게 떨어집니다.
대신, 결제 제공업체를 씁니다 — Stripe가 흔한 선택이고, 대부분의 AI 앱 빌더가 잘 압니다. 제공업체가 미리 만들어진 안전한 결제 폼을 줍니다. 고객은 카드를 제공업체의 폼에 입력하고, 제공업체가 청구하며, 당신의 앱은 “네, 결제됐습니다”라는 메시지만 받습니다. 당신의 앱은 결제가 일어났다는 걸 압니다. 카드 번호는 결코 알지 못합니다.
AI 빌더에게 결제를 추가하라고 할 때, 이렇게 명확히 말하세요: “Stripe Checkout(또는 Stripe의 호스팅 결제 폼)을 써서 내 앱이 원본 카드 데이터를 절대 다루지 않게 해 줘.” 빌더가 카드 번호 입력란이 있는 맞춤 폼을 생성하기 시작하면, 멈추세요. 그게 바로 빌더가 만들지 않기를 바라는 단 하나입니다.
”결제 추가”가 실제로 무엇을 포함하는가
시작하기 전에 구성 요소를 알아 두면, 뭔가 빠졌을 때 알아챌 수 있어 유용합니다. 작동하는 결제 흐름에는 네 조각이 있습니다:
- 가격. 무엇을 얼마에 청구하는지, 그리고 일회성인지 정기인지. 이건 앱에 하드코딩하는 게 아니라 결제 제공업체에 있습니다.
- 결제 단계. 고객이 클릭하는 버튼으로, 그들을 제공업체의 안전한 폼으로 보냅니다.
- 앱으로 돌아오는 확인. 결제 후, 제공업체가 당신의 앱에 “이 사람이 이것을 결제했습니다”라고 알립니다. 이건 초보자가 가장 자주 건너뛰는 부분이며 — 건너뛰면 결제는 했는데 접근 권한은 못 받은 사람들이 생깁니다.
- 누가 무엇을 결제했는지에 대한 기록. 그래야 앱이 알맞은 것의 잠금을 풀 수 있고, 나중에 “이 사람이 결제했나?”에 답할 수 있습니다.
AI 빌더가 카드를 청구하는 결제 버튼을 줬는데 그 뒤로 앱이 아무것도 다르게 하지 않는다면, 2번 조각은 만들고 3번과 4번 조각은 잊은 겁니다. 그게 가장 흔한 반쯤 만들어진 결제 흐름이고, 고객이 결제하고 아무것도 못 받기 전까지는 멀쩡해 보입니다.
AI 빌더에게 어떻게 설명할까
위의 조각들을 다 담은 프롬프트입니다:
이 앱에 Stripe Checkout으로 유료 접근을 추가해 줘. 요금제는 하나야: 월 19달러.
로그인한 사용자가 “업그레이드”를 클릭하면 Stripe의 호스팅 결제 페이지로 보내. 맞춤 카드 폼은 만들지 마 — 내 앱은 카드 번호를 절대 다루지 않아야 해.
결제에 성공하면 그 사용자를 데이터베이스에서 “결제됨”으로 표시하고 리포트 페이지의 잠금을 풀어 줘. 결제가 실패하거나 취소되면, 메시지와 함께 가격 페이지로 되돌려 보내.
무언가의 잠금을 풀기 전에 Stripe 웹훅으로 서버 쪽에서 결제를 확인해 — 사용자가 성공 페이지로 돌아온 것만으로 잠금을 풀지 마.
그 마지막 문단이 진짜 결제 흐름과 허술한 결제 흐름을 가르는 부분입니다. 성공 페이지가 접근 권한을 풀게 하면, 성공 페이지의 주소를 알아낸 사람이 누구든 공짜로 잠금을 풀 수 있습니다. 웹훅 — Stripe에서 당신 앱의 백엔드로 가는 직접적이고 검증된 메시지 — 이 믿을 수 있는 신호입니다. 당신의 AI 빌더는 이걸 어떻게 설정하는지 알고 있습니다. 당신은 그저 이름을 대고 요청하기만 하면 됩니다.
진짜 돈 전에 가짜 돈으로 테스트하라
Stripe(그리고 대부분의 제공업체)는 진짜처럼 동작하는 가짜 카드 번호가 있는 테스트 모드를 줍니다 — 성공하는 카드, 거절되는 카드, 오류를 일으키는 카드까지요. 그걸 쓰세요. 진짜 카드 한 장이 앱에 닿기 전에, 모든 경로를 끝까지 거쳐 보세요:
- 성공한 결제. 알맞은 것이 잠금 해제됐나요? 사용자 상태가 “결제됨”으로 바뀌었나요?
- 거절된 카드. 앱이 매끄럽게 처리했나요, 아니면 사용자를 깨진 화면에 가둬 뒀나요?
- 취소된 결제 — 사용자가 결제 대신 “뒤로”를 클릭한 경우. 그들이, 여전히 업그레이드되지 않은 채, 말이 되는 곳에 도착했나요?
- 결제한 뒤, 로그아웃했다가 다시 로그인하기. 여전히 “결제됨” 상태인가요? (현재 세션에서만 접근 권한을 풀고 내일이면 잊어버리는 앱을 이걸로 잡아냅니다.)
AI 빌더에게 테스트 카드 번호를 물어보거나, 제공업체 문서에서 찾아보세요. “이 결제는 성공함” 용 흔한 테스트 카드는 빌더에게 요청하면 줄 수 있습니다. 네 가지 시나리오를 모두 돌려 보세요. 거절된 카드와 취소된 결제 경로가 AI 빌더가 가장 자주 깨진 채로 두는 것들입니다. 행복한 경로가 그들이 최적화하는 경로니까요.
진짜 돈을 잃게 하는 실수들
첫 결제 흐름에서 거듭 나타나는 몇 가지 구체적인 실패 양상이 있습니다:
웹훅 대신 성공 페이지에서 잠금 해제하기. 위에서 다뤘지만, 비싼 실수라 다시 짚을 만합니다. 사용자가 /success에 도착하는 순간 앱이 유료 기능의 잠금을 푼다면, 결제 여부에 대해 사용자의 브라우저가 정직하기를 믿는 셈입니다. 늘 그렇지는 않습니다. 웹훅에서 잠금을 푸세요.
무엇을 결제했는지에 대한 기록이 없음. 앱이 그냥 전역적인 “결제됨: 예” 플래그만 켠다면, 요금제가 둘 이상이 되거나, 누군가 해지하거나, 환불해 줘야 하는 순간 곤란해집니다. 구체적인 것을 저장하세요: 어떤 요금제인지, 언제인지, 그 결제에 대한 제공업체의 ID. 나중에 고객 응대 질문에 필요합니다.
구독이 끝난다는 걸 잊기. 일회성 결제는 단순합니다: 결제하면 결제한 겁니다. 정기 구독은 끊길 수 있습니다 — 카드가 만료되거나, 다음 달 결제가 실패하거나. 앱이 “결제했음”만 듣고 “구독이 끝났음”은 절대 안 듣는다면, 결제를 멈춘 뒤에도 공짜로 접근 권한을 유지하는 사람들이 생깁니다. 빌더에게 성공뿐 아니라 “구독 취소되거나 결제 실패함” 메시지도 처리하라고 말하세요.
가격이 두 곳에 있어서 잘못된 금액을 청구함. 가격이 앱의 화면에 그리고 결제 제공업체에도 적혀 있으면, 결국 둘이 어긋나서 고객이 19달러를 봤는데 29달러가 청구됩니다. 가격은 한 곳에 — 제공업체에 — 두고, 앱은 제공업체가 말하는 것을 그대로 표시하게 하세요. 진실의 원천은 하나로.
출시 전 짧은 체크리스트
테스트 모드에서 진짜 돈으로 전환하기 전에:
- 내 앱에는 누군가 원본 카드 번호를 입력하는 입력란이 없다.
- 결제는 사용자가 성공 페이지에 도달한 게 아니라 제공업체의 웹훅으로 확인된다.
- 성공한 결제, 거절된 카드, 취소된 결제를 테스트했고 — 셋 다 말이 되게 동작한다.
- 결제 후, 로그아웃해도 그리고 다음 날에도 접근 권한이 풀린 채로 유지된다.
- 내 앱은 사람마다 단지 결제했다는 사실이 아니라 무엇을 결제했는지 기록한다.
- 구독이 끊기면 접근 권한이 자동으로 제거된다.
- 제공업체 키를 테스트 모드에서 라이브 모드로 전환했다 (잊기 쉽습니다 — 첫 진짜 고객이 테스트 키에 부딪히면 혼란스러운 오류를 받습니다).
모든 칸에 체크가 됐다면, 진짜 카드를 받을 준비가 된 겁니다. 안 됐다면, 그게 AI 빌더와 나눌 다음 대화입니다 — 링크를 공유하기 전에요, 첫 분쟁 후가 아니라.
도움이 되는 마음가짐
돈은 앱에서 “작동하는 것처럼 보임”과 “실제로 작동함”이 가장 멀리 떨어진 부분입니다. 깨진 레이아웃은 즉시 보입니다. 결제를 확인하지 않고 접근 권한을 푸는 결제 흐름은 완벽해 보입니다 — 누군가 알아채고 친구들에게 말하기 전까지는요.
그러니 결제 흐름을, AI로 만든 앱에서 회의론자처럼 테스트하는 단 하나의 부분으로 다루세요. 결제하지 않고 들어가 보려 해 보세요. 깨 보려 해 보세요. 결제한 다음 접근 권한을 잃어 보려 해 보세요. 당신 자신의 앱을 속이려고 쓰는 30분이, 당신이 그 앱에 들 수 있는 가장 싼 보험입니다.
만든 것에 결제를 추가하려 하나요? 다음 AI 빌더 세션을 열 때, 결제 버튼만 요청하지 말고 전체 흐름을 — 가격, 결제, 웹훅 확인, 무엇이 잠금 해제되는지 — 한 번에 설명하세요. 결제 버튼은 쉬운 10%입니다. 나머지 90%가 돈을 정직하게 지키는 부분입니다.