취소는 왜 두 종류인가요?
본 글은 제도 이해를 돕기 위한 교육용 참고 자료이며, 법률 자문이 아닙니다. 본문의 법령은 최종 수정일 기준으로 요약 및 발췌되었으므로, 이후 개정되거나 해석이 달라질 수 있습니다. 실제 업무에 적용하기 전 반드시 현행 법령(국가법령정보센터)을 직접 확인하고 전문가(세무사·노무사 등)의 자문을 거치시기 바랍니다. 본 글의 정보를 활용해 발생한 어떠한 결과나 법적 문제에 대해서도 작성자는 책임지지 않습니다.
온라인에서 결제를 취소하면 어떤 때는 카드 앱의 이용내역에서 그 건이 흔적 없이 사라집니다. 어떤 때는 결제와 취소가 두 줄로 나란히 남고, 돈은 며칠 뒤에야 돌아옵니다.
누른 버튼은 똑같이 하나였습니다. 금액도 카드도 같습니다. 그런데 결과가 다릅니다.
그렇다면 취소를 누른 순간에 되돌려진 것은 대체 무엇이었을까요?
카드 결제 취소는 매입 전후에 따라 처리 방식이 달라집니다. 여기에 승인 결과를 모를 때의 망취소, 금액 일부만 돌려주는 부분취소가 더해집니다. 이 글에서는 이 분류를 구분하고, 통신 실패와 재시도에서 중복 결제·환불을 막는 방법을 살펴봅니다.
부분취소는 금액에 따른 분류입니다. 매입 후에만 가능한 별도 단계라는 뜻은 아닙니다.
경계선은 매입에 있다
앞 글에서 신용카드 승인은 결제를 허용하고 이용 가능 한도를 차감하는 단계, 매입은 승인된 거래의 대금을 청구하는 단계로 구분했습니다.
매입 전에 취소하면 승인된 거래가 대금 청구로 넘어가지 않도록 처리하고 한도를 복원합니다. 이를 승인취소라고 부릅니다.
매입 후에는 이미 접수된 매출전표를 되돌려야 합니다. 이를 매출취소라고 부르며, 정산 예정 금액에서 빼거나 이미 지급된 대금을 조정하는 절차가 필요합니다. 구매자의 한도 복원이나 환급에도 시간이 더 걸릴 수 있습니다.
카드사와 가맹점 사이의 통신을 중계하는 VAN사(부가가치통신망, Value Added Network) 가운데 하나인 유비씨엔의 공개 개발자 문서는 이 경계를 마감이라는 말로 설명합니다(2026년 8월 확인 기준). 승인 직후 마감 전에 취소하는 것이 승인취소이고, 마감이 완료되어 매입이 진행된 이후의 취소는 정산 대상에서 차감하는 방식으로 처리된다는 것입니다. 같은 대상을 문서에 따라 매입취소라고도 부르는데, 이 시리즈는 매출취소로 통일해 쓰겠습니다.
그러면 마감은 언제일까요. 마감 시각은 법령이 아니라 계약과 관행이 정합니다. 국내 PG사의 공개 안내는 매일 23시 59분 59초에 그날의 카드 승인을 마감하고 자정부터 매입 작업을 시작한다고 적고 있습니다(토스페이먼츠 공개 문서, 2026년 8월 확인 기준). 이 값은 카드사·매입사·PG사와의 계약에 따라 달라집니다. 소비자 쪽에서 "당일 취소가 빠르다"는 말이 도는 것도 마감이 하루 단위로 돌아가기 때문입니다.
1편에서 본 매입 상태 필드에 CANCEL_REQUESTED와 CANCELED가 따로 들어 있는 것도 같은 사정입니다. 매입을 되돌리는 일이 별개의 상태로 관리되어야 할 만큼, 매입 전후의 처리를 구분해야 합니다.
취소는 원 거래를 지우지 않는다
결제를 취소해도 원래 거래와 취소 이력은 추적할 수 있어야 합니다. 원 결제 객체의 상태나 잔액을 갱신할 수는 있지만, 승인 이력까지 삭제해 없던 거래로 처리하는 것은 아닙니다.
공개된 연동 문서의 응답 필드가 이 사실을 그대로 드러냅니다. 나이스페이먼츠의 취소 API는 성공하면 취소 응답 TID인 cancelledTid를 돌려주는데, 매뉴얼은 부분취소에서 이 값이 원 거래의 tid와 다른 값으로 응답된다고 적어 둡니다. 토스페이먼츠는 부분취소를 여러 번 하면 결제 객체의 cancels 필드에 취소 객체가 여러 개 쌓이고, 각 취소가 자기 transactionKey를 가집니다. 같은 결제에 여러 취소 이력이 연결될 수 있는 구조입니다.
법 쪽에도 이유가 있습니다. 전자금융거래법은 거래 내용을 추적·검색하고 오류를 확인·정정할 수 있는 기록을 만들어 보존하도록 요구합니다.
전자금융거래법 제22조(전자금융거래기록의 생성ㆍ보존 및 파기) ① 금융회사등은 전자금융거래의 내용을 추적·검색하거나 그 내용에 오류가 발생할 경우에 이를 확인하거나 정정할 수 있는 기록(이하 이 조에서 "전자금융거래기록"이라 한다)을 생성하여 5년의 범위 안에서 대통령령이 정하는 기간동안 보존하여야 한다.
원 거래를 지워 버리면 추적할 대상이 사라집니다. 취소가 별도의 기록으로 쌓이는 구조는 이 의무와 맞물려 있습니다.
회계도 오래전부터 같은 습관을 갖고 있습니다. 잘못 적은 전표를 지우지 않고 반대 방향의 분개를 하나 더 기록해 상계합니다(지출 하나는 어떻게 전표가 될까요?). 취소 전표가 하는 일이 정확히 그것입니다.
소비자 화면에 표시되는 방식은 카드사와 청구서 마감 시점에 따라 다릅니다. 매입 전 취소는 청구 대상에서 빠질 수 있고, 매입 후 취소는 결제와 취소가 각각 표시되거나 다음 청구액에서 차감될 수 있습니다. 화면에서 사라졌다고 내부 거래 기록까지 삭제된 것은 아닙니다.
응답이 오지 않았다: 망취소
여기까지는 취소를 요청한 쪽이 무엇을 되돌릴지 알고 있었습니다. 결제 연동에는 그것조차 모르는 상태가 있습니다.
가맹점 서버가 승인을 요청했는데 응답이 돌아오지 않았습니다. 타임아웃이 났거나 그 사이 회선이 끊겼습니다. 이때 확실한 것은 요청을 보냈다는 사실뿐입니다. 요청이 카드사에 닿지 않았을 수도 있고, 닿아서 승인까지 났는데 응답만 오다가 끊겼을 수도 있습니다. 뒤쪽이라면 회원의 한도는 이미 잡혀 있고 가맹점만 그것을 모릅니다. KICC의 공개 개발자 문서도 타임아웃을 요청은 갔는데 응답이 오다가 끊긴 경우일 수 있다고 설명하면서, 통신장애 오류코드 TP01에 대해 망취소 처리가 이뤄진다고 안내합니다.
불확실한 승인 요청을 되돌리기 위해 사용하는 절차가 망취소(網取消)입니다. 망(網)은 통신망을 가리킵니다. 통신 때문에 생긴 취소라는 이름입니다.
나이스페이먼츠의 공개 매뉴얼은 조건을 좁게 적어 둡니다. 네트워크 순단이나 HTTP 클라이언트의 read timeout으로 승인 결과가 불확실할 때 망취소 API를 호출하고, 승인 요청과 응답 수신 처리에 실패한 경우에만 망취소를 요청하도록 권장합니다. 유효기간도 짧아서, 같은 문서는 한 시간을 넘기면 실패한다고 적고 있습니다(2026년 8월 확인 기준).
일반 취소는 확인된 결제를 대상으로 하지만, 망취소는 승인 결과를 받지 못한 요청을 대상으로 합니다. 이때 쓸 수 있는 식별자는 연동 방식에 따라 다릅니다. 나이스페이먼츠의 해당 API는 가맹점 인증 정보와 함께 주문번호로 대상을 찾습니다. 다른 PG나 인증 흐름에서는 승인 전부터 받은 거래 키를 사용할 수도 있습니다.
망취소도 요청에 실패하거나 응답을 받지 못할 수 있습니다. 따라서 호출했다는 사실만으로 취소 완료로 처리해서는 안 됩니다. 응답과 거래 조회로 최종 상태를 확인하고, 제한 시간을 넘겼다면 PG가 안내하는 일반 취소나 별도 확인 절차를 따라야 합니다. 망취소의 유효 시간이 곧 매입 마감 시각인 것은 아닙니다.
국내 PG 문서에서는 망취소 API를 netcancel 등의 이름으로 제공합니다. 거래 조회와 망취소 중 무엇을 먼저 요청할지, PG가 내부적으로 망취소를 수행하는지는 연동 방식에 따라 다릅니다. 사용 중인 승인 모델의 장애 처리 순서를 따르고, 최종 상태가 확인될 때까지 주문을 별도로 관리해야 합니다.
같은 요청이 두 번 도착하면
통신 실패는 반대 방향의 문제도 만듭니다. 응답을 받지 못한 가맹점 서버가 재시도를 하는 경우입니다. 첫 요청이 실제로는 승인까지 났다면, 중복 방지가 없는 재시도는 같은 결제를 두 번 승인시킬 수 있습니다. 망취소가 "했는지 모르는 일을 없던 것으로" 만드는 장치였다면, 여기서 필요한 것은 "이미 한 일을 두 번 하지 않게" 만드는 장치입니다.
그 성질의 이름이 멱등성(idempotency)입니다. 같은 요청을 반복해도 한 번 실행했을 때와 같은 효과가 나야 한다는 뜻이고, 이를 가능하게 하는 것은 요청에 붙는 식별자입니다. 서버가 두 요청을 같은 요청으로 알아볼 근거가 없으면, 재시도와 별개의 두 건을 구분할 방법이 없습니다.
토스페이먼츠는 이것을 헤더로 노출합니다. 모든 POST API에 Idempotency-Key 헤더를 붙일 수 있고, UUID처럼 충분히 무작위한 고유값을 쓰며 길이는 최대 300자입니다. 멱등키에 API 키·요청 주소·HTTP 메서드 조합까지 같은 요청이 다시 오면 첫 요청과 같은 응답이 돌아옵니다. 키의 수명은 처음 쓴 날부터 15일입니다(2026년 8월 확인 기준).
식별자를 헤더로 두지 않고 주문번호로 대신하는 방식도 있습니다. 같은 주문번호로 승인이 다시 들어오면 거절하는 것입니다. 토스페이먼츠의 공개 에러 코드 목록에 DUPLICATED_ORDER_ID("이미 승인 및 취소가 진행된 중복된 주문번호입니다")가 이 방어에 해당합니다. 취소 쪽에도 같은 방어가 있어서, ALREADY_CANCELED_PAYMENT("이미 취소된 결제 입니다")는 전액취소를 두 번 보내도 두 번 환불되지 않는다는 뜻입니다.
부분취소에서는 “이미 전액 취소됐는가”라는 검사만으로는 부족합니다. 11만 원 결제에 3만 원 부분취소를 두 번 보내면 6만 원이 취소되는데, 두 요청 모두 그 자체로는 정당하고 이미 취소된 결제라는 판정에도 걸리지 않습니다. 같은 부분취소를 재시도할 때는 같은 멱등키를 사용해야 합니다. 별도로 포트원의 연동 문서는 취소를 요청할 때 환불 가능 금액을 검증값으로 함께 보내도록 안내합니다. 1만 원짜리 결제에서 이미 1천 원이 환불됐다면 검증값은 9천 원이고, 이 값이 서버가 아는 잔액과 어긋나면 요청이 막힙니다. 잔액이 이미 바뀌었으면 두 번째 요청은 이 검증에서 거절됩니다.
일부만 되돌리려는데 막히는 이유
부분취소는 취소 가능 금액이라는 잔액을 남깁니다. 전액취소는 거래를 끝내지만 부분취소는 그 잔액을 계속 유지해야 하므로, 원 거래를 여러 갈래로 쪼갤 수 있는 거래에서만 성립합니다.
그래서 부분취소가 막히는 경우가 여럿 있습니다. 포트원이 안내하는 제한 사례를 정리하면 이렇습니다(2026년 8월 확인 기준).
| 막히는 거래 | 막는 근거 |
|---|---|
| 복합결제(카드사 포인트 등이 섞인 거래) | 카드사 정책 |
| 해외 카드(VISA · MASTER · JCB) | 국내 매입사 정책 |
| 선불카드 · 기프트카드 · 구매전용카드 | 카드사 정책 |
| 법인카드 중 회원이 취소를 막아 둔 경우 | 카드 소유자 설정 |
| 에스크로 거래 | 결제수단 제약 |
복합결제는 취소 금액을 카드와 포인트 등에 어떻게 배분할지도 처리해야 합니다. 다만 이것이 기술적으로 항상 불가능하다는 뜻은 아닙니다. 부분취소 지원 여부와 배분 방식은 카드사·PG·결제 상품에 따라 다릅니다.
즉시할인처럼 금액 구성이 복잡한 거래에는 조건이 하나 더 붙습니다. 토스페이먼츠의 공개 에러 코드 EXCEED_CANCEL_AMOUNT_DISCOUNT_AMOUNT의 메시지는 "즉시할인금액보다 적은 금액은 부분취소가 불가능합니다"입니다. 즉시할인이 붙은 거래에서 취소 금액이 할인금액보다 작으면 막힌다는 뜻입니다.
연동할 때는 부분취소가 항상 가능하다고 가정해서는 안 됩니다. 응답의 부분취소 가능 여부와 해당 PG의 정책을 확인해야 합니다. 지원하지 않는 거래는 전액취소 후 남길 금액을 다시 결제하는 방식 등을 고객과 협의할 수 있습니다. 이때 재결제 동의와 카드 한도, 할인 조건도 다시 확인해야 합니다.
전자금융거래법은 이용자에게 오류 정정을 요구할 권리를 주고, 요구를 받은 사업자에게 기한을 정해 답할 의무를 지웁니다.
전자금융거래법 제8조(오류의 정정 등) ① 이용자는 전자금융거래에 오류가 있음을 안 때에는 그 금융회사 또는 전자금융업자에게 이에 대한 정정을 요구할 수 있다.
② 금융회사 또는 전자금융업자는 제1항의 규정에 따른 오류의 정정요구를 받은 때에는 이를 즉시 조사하여 처리한 후 정정요구를 받은 날부터 2주 이내에 오류의 원인과 처리 결과를 대통령령으로 정하는 방법에 따라 이용자에게 알려야 한다.
할부 거래에는 경로가 하나 더 있습니다. 할부거래에 관한 법률 제8조는 소비자의 청약 철회를 두고, 같은 법 제16조(소비자의 항변권) 제2항은 간접할부계약에서 할부가격이 대통령령으로 정한 금액 이상일 때에만 신용제공자에게 할부금의 지급을 거절할 수 있게 합니다. 같은 법 시행령 제11조는 그 금액을 10만 원으로, 신용카드를 사용한 할부거래는 20만 원으로 정하고 있습니다. 가맹점의 취소 처리와는 별개로 소비자가 카드사를 상대로 쓸 수 있는 수단이며, 금액뿐 아니라 법에서 정한 할부계약과 항변 사유에 해당해야 합니다.
Recap
- 부분취소는 취소 가능 금액이라는 잔액을 남기므로, 원 거래를 쪼갤 수 있는 거래에서만 성립합니다.
- 복합결제·해외 카드·선불카드·에스크로 등은 상품과 연동 계약에 따라 부분취소가 제한될 수 있습니다.
- 부분취소가 제한되면 전액취소 후 재결제 등의 대안을 고객과 협의해야 합니다. 할인 조건도 다시 확인합니다.
한 건을 끝까지 따라가 보기
11만 원짜리 온라인 결제 한 건을 놓고, 취소 요청이 언제 어떤 상태에서 들어오는지만 바꿔 보겠습니다. 8월 24일 오후 3시에 일시불로 승인이 났고, 이 PG사의 매입 마감은 자정입니다.
| 취소 요청 | 취소 금액 | 매입 | 취소의 종류 | 남는 기록 |
|---|---|---|---|---|
| 승인 응답 수신 실패 (15:00) | - | 확인 필요 | PG 절차에 따른 망취소 | 원 요청과 망취소 처리 결과 |
| 당일 17:00 | 110,000 | 전 | 승인취소 | 승인 1건 + 승인취소 1건 |
| 8월 26일 | 110,000 | 후 | 매출취소 | 매출 전표 + 취소 전표 |
| 8월 26일 | 30,000 | 후 | 부분취소 | 매출 전표 + 취소 전표. 잔액 80,000 |
| 8월 26일 (카드사 포인트를 섞어 결제했다면) | 30,000 | 후 | 부분취소 불가(카드사에 따라) | 고객 동의 후 전액취소 + 재결제 80,000 |
첫 줄에서는 승인이 났는지부터 불확실합니다. 사용 중인 PG의 절차에 따라 주문번호 등으로 조회하거나 망취소를 요청합니다. 나이스페이먼츠의 해당 API처럼 1시간의 제한이 있을 수 있지만, 모든 PG에 같은 기한이 적용되지는 않습니다. 최종 결과가 확인되기 전에는 주문을 결제 실패나 취소 완료로 단정하지 않습니다.
두 번째 줄은 매입 전 승인취소입니다. 한도가 풀리고, 이 건은 매입으로 넘어가지 않으니 청구서에 오르지 않습니다.
세 번째 줄은 자정을 넘겼습니다. 같은 11만 원, 같은 전액 취소인데 처리 방식이 달라져 취소 전표가 새로 매입돼야 합니다. 명세서에는 11만 원 결제와 11만 원 취소가 둘 다 남고, 청구서 마감이 사이에 끼면 취소가 다음 달로 밀립니다. 정산에서는 이미 지급된 대금을 되돌리는 조정이 붙습니다.
네 번째 줄에서 처음으로 잔액이 생깁니다. 3만 원이 취소되고 취소 가능 금액 8만 원이 남습니다. 이 잔액을 두 번 건드리지 않으려고 요청에 검증값을 싣는 이야기가 같은 요청이 두 번 도착하면의 내용이었습니다.
다섯 번째 줄은 같은 3만 원인데 결제 수단 구성이 달라 부분취소가 막힙니다. 카드사 포인트가 섞인 복합결제이고 그 카드사가 부분취소를 막아 두었다고 합시다. 고객과 협의해 11만 원을 전액 취소하고 8만 원을 재결제할 수 있습니다. 소비자가 실제로 부담하는 금액은 8만 원으로 같지만 기록은 세 건이 되고, 재승인의 승인일은 8월 24일에서 8월 26일로 옮겨 갑니다. 다만 결제일이 바뀌었다고 매출 인식일도 자동으로 바뀌지는 않습니다. 실제 재화·용역의 제공과 계약 변경 여부를 따로 봐야 합니다. 그 이야기는 카드 매출은 어떻게 장부와 세금이 될까요?에서 이어집니다.
취소를 처리할 때는 매입 전후인지, 승인 결과를 알고 있는지, 전액과 일부 중 얼마를 취소할 것인지를 따로 확인해야 합니다. 그리고 어떤 방식으로 처리하든 원 거래와 취소 결과를 연결해 기록해야 합니다.
Recap
- 같은 금액의 전액 취소라도 매입 전이면 승인취소, 매입 후면 매출취소입니다. 요청 시각만으로 추측하지 말고 실제 매입 상태를 확인합니다.
- 망취소의 식별자·시한·확인 절차는 PG 문서를 따릅니다. 요청만 보내고 완료로 처리해서는 안 됩니다.
- 부분취소가 제한되면 재결제 등의 대안을 협의합니다. 재결제일과 회계상 매출 인식일은 별도로 판단합니다.
References
- 전자금융거래법: 제8조(오류의 정정 등), 제22조(전자금융거래기록의 생성ㆍ보존 및 파기). 국가법령정보센터
- 할부거래에 관한 법률: 제8조(청약의 철회), 제16조(소비자의 항변권) 제2항. 국가법령정보센터
- 할부거래에 관한 법률 시행령: 제11조(소비자의 항변권 제한). 신용제공자에 대한 항변권의 할부가격 요건. 국가법령정보센터
- 취소·환불·망취소: 망취소 호출 조건과 유효시간, 취소 응답의
cancelledTid, 결제수단별 부분취소 가능 여부. 나이스페이먼츠 결제연동 매뉴얼 - 멱등키 · API 에러 코드:
Idempotency-Key헤더와 유효기간, 중복 주문번호·이미 취소된 결제·부분취소 제약 코드. 토스페이먼츠 개발자센터 - 신용카드 승인과 매입, 어떤 개념인가요?: 매일 23시 59분 59초 승인 마감과 자정 이후 매입이라는 관행의 출처
- 오류코드: 타임아웃 처리 안내와 통신장애 코드
TP01. KICC 개발자 센터 - 부분 취소가 불가한 케이스 · 결제취소(환불) 연동하기: 카드사 정책에 따른 부분취소 제약 목록과 환불 가능 금액 검증값. 포트원
- 승인취소와 매입취소의 차이: 마감을 기준으로 갈리는 두 취소. 유비씨엔 개발자센터
- 카드를 긋는 순간 무슨 일이 벌어질까요?: 이 글이 경계로 삼은 승인과 매입의 정의
- PG와 VAN은 뭐가 다른가요?: 취소 요청이 지나가는 통신 경로와 각 사업자의 자리
- 결제 수수료는 누가 얼마를 가져가나요?: 카드·PG 수수료의 구성과 지급 조건
- 카드 매출은 어떻게 장부와 세금이 될까요?: 결제 시점과 매출 인식 시점의 차이, 부가세와 장부의 관계
- 지출 하나는 어떻게 전표가 될까요?: 지우지 않고 반대 분개로 상계한다는 회계의 같은 습관
