안녕하세요 여러분! 우징입니다🤗
저는 아직 전자결제 시스템을 직접 연동하거나 실무에서 경험해본 적은 없습니다.
하지만 여러 회사의 공식 문서(NHN KCP, KG이니시스,Toss Payments 등)를 바탕으로 결제 프로세스를 조사하고 학습한 내용을 기반으로, 이번 프로젝트에서는 실제 전자결제 회사처럼 작동하는 결제 시뮬레이터를 Spring Boot로 구현해보려고 합니다.
하지만, 그 전에 전자결제가 무엇인지, 어떤식으로 결제가 진행되는건지 알아보겠습니다!
전자결제란?
✅ 온라인에서 상품이나 서비스를 결제할 수 있도록 중개해주는 시스템!
오프라인에서는 우리가 현금이나 카드를 내밀면서 결제를 하죠.
하지만 온라인 쇼핑몰, 앱, 서비스에서는 그런 직접 결제가 불가능하니,
전자적으로 결제 정보를 주고받고 처리하는 시스템이 필요합니다.
그게 바로 전자결제(Electronic Payment)입니다.
💡 전자결제를 진행하는 회사를 PG사(Payment Gateway)라고 합니다!
즉, 고객이 결제요청을 하게되면 PG사에서 각 금융사(카드사, 은행 등)에게 결제 요청을 해주는거죠!
전자결제에 참여하는 주체들
역할 | 설명 |
고객 | 상품을 구매하려는 사용자 |
가맹점(쇼핑몰 등) | 고객이 상품/서비스를 결제하려는 웹사이트, 앱 |
PG사(Payment Gateway) | 결제 요청을 카드사/은행으로 중계해주는 결제 대행사 |
카드사/은행 | 실제로 결제를 승인/거절하는 금융사 |
PG사(Payment Gateway) 필요한 이유?
❓ 그럼 왜 굳이 수수료까지 내면서 PG사를 통해 결제를 진행하는걸까요?
가맹점이 직접 카드사랑 계약해서 결제 처리하면 안 되나요?
👉 가능은 하지만, 매우 힘들고 비효율적입니다.
1️⃣ 카드사/은행과 각각 직접 계약해야 하는 부담
국내 카드사만 해도 7곳 이상, 은행은 10곳 이상...
만약 PG사가 없다면 가맹점(쇼핑몰 등)에서 직접 모든 카드사, 은행, 통신사 등 각 결제사와 직접 개별 계약
➡ 서로 다른 API, 보안 규격, 정산 방식까지 전부 구현해야할겁니다.
❗ 개발자는 매번 다른 스펙에 맞춰서 API를 따로 만들어야 하고,
❗ 관리자는 정산 내역을 카드사마다 따로 확인해야 합니다.
❌ 비효율의 극치!
✅ PG사는 이걸 하나로 통합해서 제공해줍니다!
2️⃣ 보안 규정(PISP, PCI-DSS) 준수 의무
카드정보를 수집·처리하는 시스템은 법적으로 매우 엄격한 보안 기준을 따라야 함
카드정보, 비밀번호, CVC 등을 수집하려면 ➡ PISP 인증, PCI-DSS 인증 필요 ➡ 보안서버, 인증서, 방화벽, 망분리, 침입탐지 시스템 등 수억 원 이상 소요됩니다.
❗ 중소 쇼핑몰, 스타트업 입장에서는 부담이 너무 크죠.
✅ PG사를 이용하면, 이 보안 인프라를 위탁해서 해결 가능합니다!
3️⃣ 간편결제·이체·휴대폰결제까지 한 번에 연동 가능
여러 결제수단을 한 번의 연동으로 해결 가능!
PG사는 단순 카드결제뿐만 아니라,
✅ 네이버페이, 카카오페이, 삼성페이, 계좌이체, 휴대폰결제, 가상계좌 등도 함께 제공합니다!
💡 PG사 API 하나만 붙이면..
1. 수십 개의 결제 방식이 자동으로 적용되고
2. 사용자는 선택권 증가, 전환율도 ⬆
4️⃣ 정산 자동화, 환불 관리, 고객센터 대행
“돈 언제 들어오지?”, “부분 환불은 어떻게?”, “고객 클레임은 누구에게?”
- PG사는 일별/주별로 매출 정산
- 취소/부분환불 처리 API 제공
- 고객 클레임도 PG사 콜센터가 중간에서 필터링해줌
✅ 이런 운영 부담까지 PG사가 덜어줍니다!
5️⃣ 결제 실패율 ⬇ 안정성 ⬆
PG사는 수많은 결제 트래픽을 안정적으로 처리할 수 있도록
장애 대비 시스템(이중화, 대체 경로)를 갖춤
- A 카드사 응답이 느리면 ➡ B로 대체 시도
- 네트워크 오류 발생 ➡ 자동 재시도
✅ 이런 고도화된 안정성 확보가 가능합니다!
➡ 직접 연동한 시스템보다 장애율이 낮고 신뢰성 높죠
따라서 PG사는 보안 + 통합 + 편의 + 안정성을 제공하는 시스템입니다!
전자결제 흐름
💡 PG사 관계자분의 말씀에 따르면, 결제 방식에 따라 프로세스가 조금씩 달라질 수 있다고 합니다!
예를 들어, 일반 카드 결제는 보통
[고객 → 가맹점 서버 → PG 서버 → 카드사 → PG 서버 → 가맹점]
의 흐름을 따르지만,
간편 결제나 일부 카드 결제의 경우에는
바로 카드사 결제창이나 간편 결제 UI로 연결되어
보다 간편하게 결제가 진행되기도 한다고 하십니다 😊
이처럼 방식에 따라 차이는 있지만,
전체적인 구조는 앞서 소개한 흐름과 비슷한 방향성을 갖고 있다고 하셨습니다!
1️⃣ 고객이 가맹점에서 결제 요청
고객이 쇼핑몰(웹사이트나 앱)에서 결제 버튼을 클릭합니다.
➡ 가맹점은 고객의 주문 정보, 결제 금액 등을 준비합니다.
2️⃣ 가맹점이 PG사에 결제 요청
가맹점은 PG사에 결제 요청 API를 호출합니다.
- 어떤 상품인지
- 금액은 얼마인지
- 고객은 누구인지
PG사는 고유 거래 번호(TID)를 발급하고 결제창 URL을 반환합니다.
3️⃣ ~ 6️⃣고객이 PG사의 결제창에서 카드 정보 입력
PG사에서 제공하는 안전한 결제창으로 고객이 이동합니다.
여기서 고객이 카드번호, 유효기간, 비밀번호, 인증번호 등을 입력하고 PG사에 전달합니다.
👉 이 과정을 통해 가맹점은 민감 정보를 직접 다루지 않아도 됨 ➡ 보안 문제 해결!
7️⃣ PG사가 카드사/은행에 결제 승인 요청
고객이 입력한 카드 정보를 바탕으로,
PG사는 카드사/은행에 결제 승인 요청을 보냅니다.
- 카드번호
- 결제 금액
- 할부 여부
- 승인 요청 시각
이 정보들을 기반으로 카드사는 결제 승인 여부를 판단합니다.
8️⃣ 카드사/은행이 승인 응답
카드사/은행은 결제 승인 여부를 판단한 후,
- 승인 성공
- 승인 실패
- 잔액 부족
- 한도 초과
등의 결과를 PG사에 응답합니다.
9️⃣ PG사가 가맹점에 결제 결과 전달
PG사는 결제 결과를 받은 뒤,
가맹점 서버에 Webhook 방식으로 결과를 전달합니다.
(이 단계는 비동기 처리되며 반드시 서버에서 콜백을 처리해야 합니다!)
💡 Webhook 이란?
Webhook은 서버 간 자동 알림 시스템입니다.
특정 이벤트가 발생했을 때, 사전에 지정된 URL로 HTTP 요청을 자동 전송합니다.
쉽게 말하면,
누가 알려주지 않아도, 자동으로 알려주는 알림 시스템입니다!
🔟 가맹점이 고객에게 결제 결과를 안내
가맹점은 받은 응답을 바탕으로
- "결제가 완료되었습니다"
- "결제가 실패했습니다"
같은 결과를 고객에게 노출합니다.
마치며
전자결제는 단순히 결제하는 기능이 아니라,
고객 ↔ 가맹점 ↔ PG ↔ 카드사/은행 간의 복잡한 흐름을
안전하고 빠르게 중계해주는 시스템이에요.
이 시리즈에서는 앞으로 이 과정을 실제 Spring Boot로 하나씩 구현하면서
- 주문 요청 ➡ 결제 요청 ➡ 승인 ➡ 콜백 ➡ 결과 처리
이렇게 실제 전자결제 흐름을 직접 만들어보겠습니다😎
읽어주셔서 감사합니다 😊
'프로젝트 실습 > Spring Boot - 전자 결제 만들기' 카테고리의 다른 글
Spring Boot로 결제 프로세스 만들기 - 4편 : 가맹점, PG, 카드사 서버 Spring Boot 프로젝트 생성 (0) | 2025.04.30 |
---|---|
Spring Boot로 결제 프로세스 만들기 - 3편 : 시스템 아키텍처 및 ERD 설계 (0) | 2025.04.24 |
Spring Boot로 결제 프로세스 만들기 - 2편 : 프로젝트 소개 (0) | 2025.04.24 |