결제 요청, 인증, 승인이 뭘까요?
결제창에서 결제 요청에 성공했는데, 왜 승인 요청까지 해야 결제 완료일까요? 결제 요청, 인증, 승인이 어떻게 다른지 단계별로 정리했습니다.

"결제창에서 완료했는데, 왜 또 승인 요청을 해요?"
내통장결제 서비스 연동을 할 때 결제창을 띄워서 결제 요청에 성공하는데, 여기서 끝난 게 아니라 승인 요청까지 해야 결제 완료라고 하네요.
결제 요청, 인증과 승인은 어떻게 다른 걸까요?
결제 요청 과정: 결제 요청 → 인증 → 승인
각 단계에 대해 자세히 알아볼게요.
1. 결제 요청
구매자가 상품 또는 서비스를 구매하기 위해 결제를 요청하는 과정이에요.
사려는 상품 정보, 구매자 정보 등을 전달해 결제창을 띄우는 단계까지가 요청 단계예요.
결제 요청 단계에서 다음 버튼을 누르면 인증 단계로 넘어가요.
2. 결제 인증
요청된 결제에 대한 인증을 진행하게 돼요.
인증은 결제하려는 고객의 핸드폰 번호로 로그인하고 PIN 번호를 확인해서, 거래가 유효하며 결제를 허용해도 되는지 확인하는 단계예요.
결제창에서 핸드폰 번호 입력 후 PIN 번호를 입력하여 완료한 단계까지가 결제 인증이 완료된 거예요.
결제 비밀번호까지 입력을 성공적으로 마쳤다면, 가맹점에 전달한 callbackUrl로 리다이렉트돼요. 결제 승인에 필요한 파라미터 값이 성공 URL로 JSON 규격으로 전달돼요.
개발자 관점 주의
3. 결제 승인
인증된 결제를 최종 승인해 달라고 내통장결제 서버로 요청해야 하는 과정이에요.
승인이 성공해야 가맹점은 구매자에게 상품이나 서비스를 제공하고, 결제 금액을 청구하게 돼요. 실제로 결제가 마무리되는 단계예요.
내통장결제에서 제공하는 결제 승인 API의 경우, 결제 요청-인증 뒤에 callbackUrl의 JSON 파라미터로 받은 정보를 이용해 승인 API를 호출해요.
실제로 고객 계좌에서 돈을 인출하는 요청이기 때문에, 결제 승인 응답이 성공으로 오면 결제가 완료돼요. 구매자에게 결제 성공 메시지를 발송하고, 개발자는 결제 성공 응답을 확인할 수 있어요.
요청-승인을 분리하는 이유
결제 연동 방식에는 요청과 승인을 따로 하는 방법 뿐만 아니라, 한 번에 하는 방식도 있어요.
한 번에 처리하는 방식은 결제 요청을 하면 바로 승인 결과까지 받을 수 있어 간편해 보여요.
다만, 언제 승인 결과가 돌아올지 알 수 없기 때문에 가맹점 서버에서 승인 결과를 받으려면 반드시 노티(Webhook)를 연동해야 해요.
노티(Webhook)를 연동했더라도 사용자가 결제창을 닫아버리거나, 가맹점 서버에 트래픽이 몰려 노티로 승인 완료 결과를 처리하지 못하는 상황이 생길 수 있어요.
노티가 여러 번 재전송을 하더라도 가맹점 서버가 받아올 수 있는 상태가 아니면, 가맹점에서는 결제 실패로 / 내통장결제 서비스에서는 결제 완료 상태로 남아 데이터가 어긋나는 문제가 생길 가능성이 높아요.
그래서 내통장결제 서비스는 결제 요청과 승인을 따로 하는 방식으로 데이터 정합성을 보장하고, 가맹점에서 해야 할 일을 줄이고자 했어요.
요청-승인을 따로 하면 결제창을 닫아버리거나 가맹점 서버 이슈 때문에 승인 데이터 정합성에 문제가 생길 가능성은 거의 없어요. 내통장결제 서비스 서버에서 리다이렉트 URL로 전달해 준 정보를 가맹점에서 직접 받아, 그 정보로 승인을 요청하면 되기 때문이에요.
| 방식 | 장점 | 단점 |
|---|---|---|
| 요청-승인 분리 (내통장결제) | 데이터 정합성 보장, Webhook 불필요 | 승인 API 연동 필요 |
| 한 번에 처리 | 구현 간편 | Webhook 필수, 정합성 관리 복잡 |
내통장결제 서비스의 결제 흐름은 요청 → 인증 → 승인 3단계로 이루어져 있어요.
승인 단계를 별도로 연동하는 이유는 가맹점과 내통장결제 서비스 간의 데이터 정합성을 보장하기 위해서예요. 처음에는 번거롭게 느껴질 수 있지만, 결제 데이터가 어긋나는 문제를 예방하는 안전한 구조예요.
