결과통보 URL, 왜 필수일까?
네트워크 오류로 결제 결과를 놓치지 않는 법. nextUrl/cancUrl과 notiUrl의 차이부터 보안 원리까지.

"결제는 성공했는데 주문 내역이 없어요?"
"고객이 결제 완료 문자까지 받았는데, 주문 내역이 없대요!"
결제 연동을 하다 보면 종종 마주치는 상황인데요. PG사 관리자 페이지를 확인하면 결제는 정상 승인되어 있지만, 주문 DB에만 내역이 없어요. 대부분 결제 완료 후 고객이 쇼핑몰로 돌아오는 과정에서 네트워크가 끊기거나 브라우저를 종료했을 때 발생해요.
브라우저를 통해 결제 결과를 전달받는 방식은 고객 환경에 의존하기 때문에 100% 신뢰할 수 없어요. 이 문제를 근본적으로 해결하는 것이 결과통보 URL(notiUrl) 이에요. 고객의 브라우저를 거치지 않고, PG사 서버가 가맹점 서버로 직접 결제 결과를 전송하죠.
이번 아티클에서는 notiUrl의 역할과 구현 방법을 알아볼게요.
결과통보 URL이란?
결과통보 URL(notiUrl)은 Server-to-Server 방식으로 결제 결과를 전달하는 웹훅(Webhook)이에요.
일반적인 결제 흐름의 한계
| 단계 | 흐름 |
|---|---|
| 1 | 고객 → PG 결제창에서 결제 |
| 2 | PG사 → 결제 처리 완료 |
| 3 | PG사 → 고객 브라우저를 nextUrl로 리다이렉트 |
| 4 | 브라우저 → 가맹점 서버로 결과 전달 |
문제: 3~4번에서 네트워크가 끊기면? 결제는 성공했지만 가맹점은 결과를 모르게 돼요.
결과통보 URL의 역할
결제 결과 전달에는 두 가지 경로가 있어요.
리다이렉트 방식 (불안정)
notiUrl 방식 (안전)
- 리다이렉트 (불안정):
nextUrl을 통해 브라우저를 거쳐 전달되는 경로예요. 네트워크 환경에 따라 끊길 위험이 있어요. - notiUrl (안전): PG사 서버에서 가맹점 서버로 직접 연결되는 경로예요. 브라우저 상태와 무관하게 안전하게 결과를 전달해요.
PG사는 결제 처리가 완료되는 즉시 이 안전한 경로(notiUrl) 를 통해 결과를 전송하므로, 데이터 누락 걱정 없이 주문을 처리할 수 있어요.
nextUrl과 notiUrl의 차이
| 구분 | nextUrl/cancUrl | notiUrl |
|---|---|---|
| 통신 방식 | 브라우저 리다이렉트 | Server-to-Server |
| 신뢰도 | 낮음 (네트워크 오류 가능) | 높음 (재시도 지원) |
| 용도 | 고객에게 결과 화면 표시 | 서버에서 주문 처리 |
| 필수 여부 | 필수 | 필수 |
| 보안 검증 | 클라이언트 노출 가능 | 서버 간 통신 |
실무 팁
notiUrl 구현 시 핵심 포인트
notiUrl 은 PG사의 POST 요청을 처리하는 API예요. 핵심은 해시 검증 과 정확한 응답 이에요.
구현 시 확인사항
| 항목 | 설명 |
|---|---|
| 해시 검증 | pktHash 값을 검증하여 요청 위변조 확인 |
| 중복 처리 방지 | 동일 주문이 여러 번 처리되지 않도록 방어 로직 필요 |
| 응답 형식 | Plain Text로 OK 또는 FAIL만 응답 |
| 상태 분기 | outStatCd가 0021이면 성공, 0031이면 실패 |
참고
주의
재시도 정책
서버 장애나 네트워크 불안정으로 notiUrl 수신에 실패할 경우, PG사는 자동으로 재시도를 수행해요.
- 재발송 조건: 응답이 "OK"가 아니거나 응답 시간이 초과된 경우
- 재발송 주기: 약 10분 간격
- 중단 조건: 가맹점 서버가 "OK"를 응답하거나, 결제일 기준 자정이 지나면 중단
따라서 장애가 발생하더라도 당일 자정 전까지 서버를 복구하면 누락된 결제 건을 자동으로 수신할 수 있어요. 자정이 지났다면 관리자 페이지에서 수동으로 재전송하거나 대사 작업을 통해 처리해야 해요.
이렇게 기억하세요
안정적인 결제 시스템을 구축하려면 고객의 행동에 의존하지 않는 것이 중요해요. nextUrl 은 사용자 경험을 위한 화면 처리에, notiUrl 은 신뢰할 수 있는 데이터 처리에 사용하세요.
URL 역할 요약
- nextUrl: 결제 성공 시 고객에게 보여줄 완료 화면 (화면 표시 전용)
- cancUrl: 결제 취소 시 고객에게 보여줄 화면 (화면 표시 전용)
- notiUrl: PG사에서 가맹점 서버로 직접 전달하는 결제 결과 (실제 주문 처리용)
연동 중 문의사항은 기술지원팀으로 연락 주세요.
