가상카드번호 (OTC)
가상카드번호(OTC) 는 실제 플라스틱 카드 번호(Real PAN) 대신, 단 1회(또는 제한된 시간)만 사용 가능한 가상의 카드 번호를 생성하여 결제하는 보안 기술입니다.
주로 해외 직구, 법인 비용 처리, 혹은 보안이 취약한 사이트에서 결제할 때 실제 카드 정보 유출을 원천 차단하기 위해 사용됩니다. 결제가 완료되거나 유효 시간이 지나면 해당 번호는 즉시 폐기됩니다.
⚙️ 작동 원리 (Mechanism)
개발자 입장에서 OTC는 일반 신용카드와 동일한 16자리 숫자(PAN) 형태를 띱니다. 따라서 결제 시스템(PG)은 이를 일반 카드처럼 처리하지만, 카드사 승인 시스템 내부에서 매핑 로직이 다르게 동작합니다.
- 생성 요청: 사용자가 앱 등을 통해 OTC 발급을 요청합니다.
- 가상 번호 발급: 카드사 시스템이 실제 카드와 매핑된 가상 번호(16자리), 가상 유효기간, 가상 CVC를 생성하여 반환합니다.
- 결제 진행: 사용자는 이 번호를 일반 신용카드처럼 입력하여 결제합니다.
- 유효성 검증: 카드사는 요청된 번호가 유효 시간 내인지, 사용되지 않은 번호인지 검증 후 승인합니다.
- 폐기: 승인이 완료되는 즉시 해당 번호는 효력을 상실합니다.
⚖️ 기술 비교: OTC vs Tokenization
둘 다 '실제 번호를 숨긴다'는 점은 같지만, 사용 목적과 수명이 다릅니다.
| 구분 | OTC (일회용 카드) | Tokenization (간편결제 토큰) |
|---|---|---|
| 형태 | 사용자가 눈으로 볼 수 있는 16자리 숫자 | 내부적으로 암호화된 난수 값 (사용자에게 안 보임) |
| 사용성 | 1회성 (사용 후 즉시 폐기) | 다회성 (기기나 앱에 저장해두고 계속 사용) |
| 입력 방식 | 사용자가 직접 Key-in (일반 결제창) | 생체 인증 등을 통해 자동 전송 (앱카드, 삼성페이 등) |
| 주 사용처 | 해외 결제, 안심 클릭, 법인 공용 카드 | 앱카드, 간편결제(Simple Payment) |
💻 개발자 팁 (Checkpoints)
1. BIN 번호 대역 확인 (BIN Range)
OTC는 가상 번호이기 때문에, 실제 플라스틱 카드의 BIN(앞 6자리 또는 8자리) 과 다른 대역을 사용하는 경우가 많습니다.
- 주의: 프론트엔드에서 카드 번호 유효성 검사(Luhn 알고리즘 등)나 카드사 식별 로직을 짤 때, 특정 BIN 대역만 허용하도록 하드코딩하면 OTC 결제가 막힐 수 있습니다.
2. 유효 시간 (TTL) 예외 처리
OTC는 보통 발급 후 5분~10분 정도의 매우 짧은 유효 시간을 가집니다.
- 사용자가 번호를 발급받아 놓고 결제창에서 시간을 지체하면
유효하지 않은 카드또는승인 거절오류가 발생합니다. 에러 메시지를 명확하게(예: "가상 카드 번호 유효 시간이 만료되었습니다.") 매핑해 주는 것이 좋습니다.
3. 취소(Refund) 로직
결제 승인 후 OTC 번호는 폐기되지만, 결제 취소(환불) 는 가능합니다.
- 카드사 시스템이 '폐기된 가상 번호'로 들어온 취소 요청을 '원본 카드'로 매핑하여 처리해주기 때문입니다. 단, 부분 취소 등 복잡한 시나리오에서는 PG사별 정책을 확인해야 합니다.