핵심 요약
- 결제 테스트는 "결제창이 뜨고 돈이 나가는가"가 아니라 이탈·네트워크 단절·부분 취소·웹훅 지연에서 시스템이 어떻게 반응하는지 검증하는 과정이에요. 카드, 가상계좌, 간편결제, 정기결제 수단별로 최소 21가지 시나리오를 돌려야 해요.
- 샌드박스 성공이 실거래 성공을 보장하지 않아요. 라이브 전환 전에 API 키 교체, 웹훅 도메인 등록, 실제 결제수단 에러 코드 매핑 3개는 반드시 점검해야 해요.
- "언제 라이브로 전환할까요?"는 감이 아니라 PG 심사 승인, 취소·환불 실결제 검증, 운영 CS 정책 수립 3가지 데이터로 답해요.
- 라이브 직후 24시간은 모니터링 구간이에요. 1원 결제 직접 테스트와 에러 로그 전수 조사로 웹훅·도메인 누락을 1시간 안에 잡아내요.
1결제 테스트, "되네요"만으로는 안 되는 이유
신용카드 결제 한 번 성공했다고 테스트를 끝내는 건, 자동차를 새로 사고 시동만 걸어본 채 고속도로에 올라가는 것과 같아요. 실제 라이브 환경에서는 개발 환경에서 예상하지 못한 수많은 변수가 발생해요.
가장 흔한 문제는 '결제 데이터의 불일치'예요. 고객 통장에서는 돈이 빠져나갔는데 서비스 DB에는 주문 내역이 없는 '고스트 주문'이 대표적이에요. 결제 완료 후 서버 간 통신(Webhook)이 제대로 이루어지지 않았을 때 발생해요. 전체 취소는 되는데 2개 상품 중 하나만 취소하는 '부분 취소'에서 에러가 나거나, 가상계좌 입금 기한이 지났는데도 주문이 유효한 상태로 남아있는 경우도 허다해요. 라이브에서 터지는 사고는 항상 "테스트하지 않은 시나리오"에서 나와요.
2필수 테스트 시나리오 체크리스트
결제 수단과 상태별로 반드시 확인해야 할 핵심 시나리오 21가지예요. 이 표를 QA 시트나 노션에 붙여넣고 하나씩 지워나가며 테스트해요.
| 구분 | 테스트 시나리오 | 테스트 방법 | 확인할 것 | 기대 결과 |
|---|---|---|---|---|
| 공통 | 결제창 이탈 | 결제창을 띄운 후 X 버튼으로 닫기 | 주문 데이터 생성 여부 | 주문이 생성되지 않거나 '결제 실패'로 기록됨 |
| 네트워크 단절 | 결제 진행 중 인터넷 연결 끊기 | 재접속 후 주문 상태 확인 | 중복 결제 방지 및 안전한 실패 처리 | |
| 카드 | 전체 취소 | 결제 완료 건을 전체 취소 | API 호출 또는 어드민 취소 실행 | 결제 상태 '취소', 카드 한도 즉시 복원 |
| 부분 취소 | 금액 일부만 취소 시도 | 취소 금액 입력 후 실행 | 남은 금액 정확히 계산, 부분 취소 영수증 생성 | |
| 할부 결제 | 5만 원 이상 결제 시 할부 선택 | 결제창 할부 옵션 선택 | 영수증에 할부 개월 수 정상 표기 | |
| 한도 초과/잔액 부족 | 한도 초과된 카드로 결제 | 실패 케이스 유도 | 명확한 에러 메시지 노출 및 주문 실패 처리 | |
| 가상계좌 | 계좌 발급 | 가상계좌 결제 수단 선택 | 결제 완료 후 계좌번호 확인 | 주문 상태 '입금 대기', 알림톡/문자 발송 |
| 입금 완료 | 발급된 계좌로 테스트 입금 | 어드민 강제 입금 또는 가상 입금 | 주문 상태 '결제 완료'로 즉시 변경 | |
| 입금 기한 만료 | 만료 시간이 지난 후 입금 시도 | 만료 시간 임의 설정 후 입금 | 입금 차단 및 주문 상태 '자동 취소' 변경 | |
| 간편결제 | 인증 취소 | 카카오페이/토스 결제 중 앱 종료 | 인증 단계에서 뒤로 가기 | 주문 실패 처리 및 결제창 정상 복귀 |
| 타인 명의 결제 | 가입자와 다른 명의 카드로 결제 | 간편결제 앱 내 카드 선택 | 정책에 따른 결제 허용 또는 차단 여부 확인 | |
| 정기결제 | 빌링키 발급 | 첫 구독 신청 및 카드 등록 | 카드 인증 후 PG사로부터 빌링키 발급·저장 | 실제 결제 없이 카드 유효성 확인 완료 |
| 재결제 성공 | 등록된 빌링키로 2회차 결제 | 예약된 시간에 자동 결제 실행 | 고객 개입 없이 '결제 완료' 및 알림 발송 | |
| 재결제 실패 | 한도 초과 카드로 2회차 결제 | 자동 결제 실패 상황 유도 | 재결제 시도 정책(ex. 3회 재시도) 작동 확인 |
3직접 확인해야 하는 5가지
표 시나리오를 실행하면서 'Pass' 여부만 체크하지 말고, 아래 5개를 사용자 관점에서 디테일하게 살펴요.
① 결제 완료 페이지의 데이터 정합성
결제에 성공한 뒤 고객께 보여주는 페이지에 실제 결제 금액, 결제 수단, 주문 상품명이 정확히 표시되는지 확인해요. 테스트 환경에서 총액 계산 로직이 꼬여 결제 금액과 화면 표시 금액이 다른 경우가 있어요.
② 웹훅(Webhook) 및 서버 통신
가장 중요해요. 결제창이 닫히고 서버가 PG사로부터 "결제 성공" 신호를 제대로 받았는지 확인해요. 어드민 페이지에서 해당 주문 상태가 수 초 내에 자동으로 변경된다면 성공이에요. 새로고침을 수십 번 해도 상태가 바뀌지 않는다면 웹훅 설정에 문제가 있어요.
③ 고객 대상 알림톡/이메일 발송
결제 완료, 입금 대기, 취소 완료 시점에 알림톡이나 문자가 고객께 전송되는지 확인해요. 특히 가상계좌는 은행명, 계좌번호, 입금 기한이 정확히 포함되어 있는지 문구 하나하나 검수해요.
④ 관리자 페이지(어드민) 반영과 취소 기능
서비스 어드민뿐만 아니라 PG사 상점관리자 페이지에도 동일한 내역이 들어왔는지 교차 검증해요. 또 어드민에서 '취소' 버튼을 눌렀을 때 실제로 PG사 쪽에 취소 명령이 전달되어 돈이 환불되는지도 확인해요.
⑤ 쿠폰 및 포인트 원복
결제 시 쿠폰이나 포인트를 사용했다면, 결제 도중 실패하거나 완료 후 취소했을 때 해당 쿠폰과 포인트가 다시 고객 계정으로 돌아오는지 확인해요. 취소했는데 포인트가 사라지면 민원이 빗발쳐요.
4실거래 환경이 테스트와 결정적으로 다른 3가지
테스트 환경(Sandbox)은 결제 '흐름'을 확인하는 곳이지 결제 '결과'를 확정하는 곳이 아니에요. 라이브로 넘어가는 순간 아래 3가지가 바뀌어요.
4-1. 상점 식별자(MID)와 API 키의 물리적 분리
가장 단순하지만 빈번하게 발생하는 실수예요. 모든 결제 솔루션은 테스트용과 실거래용 프로젝트를 아예 다른 DB로 관리해요.
- 기획자 확인: PG 심사 승인 통보를 받으면 실거래용 MID가 발급돼요. 이 MID와 연결된 '라이브용 API 키'가 서비스 코드에 반영되었는지 확인해요.
- 사례: 테스트 키를 그대로 둔 채 배포하면 "인증에 실패했어요" 또는 "테스트 모드에서는 실거래를 할 수 없습니예요" 에러가 뜨며 고객이 이탈해요.
- 개발자 확인: 테스트 모드 플래그(
test_mode: true) 제거 및 Production 환경 변수 적용 여부.
4-2. 웹훅(Webhook) 도메인과 보안 방화벽
테스트 환경에서는 localhost나 내부 IP를 써도 결제 결과가 전달되지만, 라이브는 PG사 서버와 서비스 서버 간 통신 보안이 훨씬 까다로워요.
- 기획자 확인: "결제창에서 돈은 빠져나갔는데 결제 완료로 안 변해요"라는 말은 십중팔구 웹훅 문제예요. 운영 도메인이 PG사 관리자 페이지에 정확히 등록되어 있는지 개발자분께 확인을 요청해요.
- 사례: PG사 서버에서 알려주는 결제 결과가 방화벽에 막혀 주문 누락이 발생해요.
- 개발자 확인: PG사별 웹훅 수신 IP 화이트리스트 등록 및 SSL(https) 인증서 적용 상태.
4-3. 실제 결제수단의 제약 조건과 에러 코드
테스트 가상 카드는 한도 무제한이지만, 실제 환경은 고객 카드 상태와 카드사 정책에 따라 변수가 넘쳐요.
- 기획자 확인: 실제 환경에서 쏟아지는 에러 코드(잔액 부족, 한도 초과 등)에 어떤 안내 문구를 보여줄지 미리 정해둬요. 에러 코드 체계는 PG사마다 다르므로 매핑 테이블을 작성해요.
- 사례: 특정 카드사의 점검 시간(자정 전후), 할부 제한 업종(디지털 콘텐츠 등)은 테스트 키로는 잡히지 않아요.
- 개발자 확인: 라이브 환경에서 반환되는 상세 에러 메시지를 로그로 남기고 안내 문구 매칭 로직 점검.
| 항목 | 테스트 환경 (Sandbox) | 라이브 환경 (Production) | 정할 것 |
|---|---|---|---|
| 인증 | 테스트 키 (무료) | 라이브 키 (심사 승인 후) | 실거래 MID 활성화 확인 |
| 통신 | 로컬/내부 IP 허용 | 도메인 보안/방화벽 필수 | 운영 도메인 등록 확인 |
| 결과 | 무조건 성공 가능 | 실제 한도/카드 정책 적용 | 에러 코드별 안내 문구 수립 |
5"언제 라이브로 전환할까요?" 판단 기준 3가지
대표님이나 팀원이 "이제 오픈해도 될까요?"라고 물을 때, 감이 아니라 아래 3가지 데이터로 답해요.
기준 1: PG 심사 승인 및 실거래 키 활성화
결제 연동은 반드시 '테스트 키 연동 완료 후 심사 신청' 순서로 진행돼요. 심사 담당자분이 모든 카드사에 대해 '승인' 처리를 마쳤는지 결제 솔루션 관리자 페이지에서 확인해요. 일부 카드사만 승인되었다면 해당 카드만 결제창에 노출하는 대응이 필요해요.
기준 2: 취소 및 환불 시나리오의 실결제 테스트 통과
결제 성공보다 중요한 게 돈을 되돌려주는 과정이에요.
- 신용카드: 관리자 페이지에서 버튼 하나로 취소가 되고 카드사 앱에서 취소 알림이 오는지 확인해요.
- 가상계좌: 고객이 입금한 뒤 환불 처리 시 고객 계좌로 실제 돈이 나가는지 확인해요. 가상계좌 입금 후는 '취소'가 아니라 '환불'이므로 가맹점이 직접 돈을 보낼 계좌를 입력받아야 하는 정책이 포함되어 있는지 점검해요.
기준 3: 운영 정책 및 CS 매뉴얼 수립
기술이 준비되어도 정책이 없으면 사고가 나요. 결제 실패 시 재시도 안내, 환불 가능 기간, 부분 취소 허용 여부가 기획 문서에 확정되어 있어야 해요. 특히 '결제는 됐는데 주문이 안 잡힌' 고객을 어떻게 구제할지에 대한 프로세스가 팀 내에 합의되어야 해요.
6라이브 직후 24시간, 사고 방지 모니터링
오픈 버튼을 누른 뒤 첫 24시간 동안 아무것도 하지 않으면 반드시 사고가 터져요.
- 실사례: 한 팀은 웹훅 수신 주소를 테스트 도메인으로 둔 채 라이브를 시작했어요. 고객은 결제를 마쳤지만 서버는 결제 완료 신호를 받지 못했어요. 고객 50명이 돈은 빠져나갔는데 상품을 못 받았고, 라이브 첫날 CS 대응으로만 모든 개발 인력이 투입되는 대참사가 벌어졌어요.
- 실거래 1원 결제: 라이브 배포 직후 본인 카드로 1원을 직접 결제해봐요. 결제 완료 알림톡이 오는지, DB에 주문 데이터가 정확히 남는지, 다시 취소했을 때 카드사에서 즉시 취소 문자가 오는지 확인하는 것이 가장 확실한 방지책이에요.
- 에러 로그 전수 조사: 결제 솔루션 관리자 페이지의 결제 로그를 실시간으로 봐요. 결제창을 열었다가 그냥 닫는 유저가 많은지, 결제 버튼에서 에러 코드가 발생하는지 구분해요. 초기 에러 코드만 잘 분석해도 웹훅 설정 오류나 도메인 누락을 1시간 안에 잡아낼 수 있어요.
7라이브 전환 최종 점검 체크리스트
라이브 배포 1시간 전, 팀 안에서 이 리스트를 복사해 담당자분과 함께 최종 점검해요.
정책·환경 체크리스트
- PG 심사 담당자분으로부터 모든 카드사의 심사 승인을 확인했는가?
- 서비스 하단의 사업자 정보와 이용약관이 실제 운영 정보와 일치하는가?
- 결제 실패 시 고객 안내 문구가 상황별(한도초과, 잔액부족 등)로 반영되었는가?
- 취소와 환불 정책이 용어 규칙에 맞게 시스템 메시지에 적용되었는가?
- 실거래 환경에서 1원 결제 및 취소를 직접 수행하여 전체 흐름을 확인했는가?
기술·보안 체크리스트
- API 키가 테스트 키에서 라이브 키로 교체되었는가?
- 실거래용 도메인(https)과 웹훅 URL이 PG사 관리자 페이지에 등록되었는가?
- 서버 방화벽에서 결제 솔루션 및 PG사 웹훅 IP가 화이트리스트에 있는가?
- 테스트 모드 플래그(
test_mode: true)가 코드 전체에서 제거되었는가? - 결제 완료 후 재고 차감 및 주문 생성 로직이 트랜잭션으로 묶여 있는가?
8테스트 결과 리포트 템플릿
테스트 결과는 말로 전달하지 말고 템플릿으로 공유해요. 그래야 수정 사항이 누락되지 않아요.
### 결제 테스트 결과 리포트 (2026-04-09)
- 테스트 환경: 샌드박스 (PC/모바일 웹)
- 기기/브라우저: iPhone 15 (Safari), Mac (Chrome)
| 시나리오 ID | 테스트 항목 | 결과 | 메모/이슈 |
| :--- | :--- | :--- | :--- |
| TC-01 | 신용카드 전체 취소 | Pass | - |
| TC-02 | 가상계좌 입금 완료 | Fail | 입금 후 주문 상태가 '결제 완료'로 안 바뀜 (웹훅 확인 필요) |
| TC-03 | 부분 취소 (카드) | Pass | 취소 후 남은 금액 어드민 노출 확인 완료 |
- 특이사항: 가상계좌 입금 통보가 늦는 현상이 있으니 서버 로그 확인 부탁드립니다.다음 단계
라이브 전환을 마쳤다면, 오픈 런북과 운영 루틴으로 넘어가요.
추천 콘텐츠
오픈 전 점검 런북 D-21부터 D-Day까지 주차별 런북과 당일 체크리스트를 확인해요.
결제 붙인 뒤 운영 사고 90% 막는 일일·주간·월간 체크리스트 일일·주간·월간으로 무엇을 모니터링해야 하는지 운영 루틴을 만들어요.
결제는 성공했는데 주문이 안 잡히는 3가지 이유와 대응 플레이북 라이브 이후 가장 자주 터지는 주문 누락 문제를 대응 흐름으로 정리해요.
바로 참고할 문서
- 개발 문서: 서비스 오픈 체크리스트
- 개발 문서: 연동 FAQ
- 도입 문의: 도입 문의
