프로젝트


<aside> 📎

Github :

Test : 🟢SimplePG-1.0.0

기간 2025.04.21 ~ 2025~05.26
구성원 BE 1명
담당 역할 BE
구현 기능 - 결제 요청/승인/취소 API 및 상태 관리 - HMAC 서명 기반 API 인증 시스템 - 동시성 제어 및 중복 결제 방지 - 웹훅 기반 비동기 결제 처리 및 가맹점 알림
기술 스택 Java, Spring Framework 5.3.37, MyBatis, MySQL, Postman, JSP, Azure
</aside>

프로젝트 개요

<aside> 📝

SimplePG는 스프링 프레임워크와 JSP 테스트 페이지로 구성된 간단한 전자결제 서비스입니다. PG 서비스의 흐름을 실제로 구현하고 이해하는 것을 목표로 진행한 프로젝트입니다.

가맹점의 결제 요청, 취소, 상태 조회, 웹훅 응답 등을 처리하는 백엔드 API를 제공하며 보안과 무결성 그리고 이를 기반으로 외부 서버와의 데이터 동기화에 초점을 맞췄습니다.

특히 결제 상태의 정확한 동기화와 데이터 무결성을 보장하기 위해 트랜잭션 처리와 외부 API 요청/응답의 실패 시 재처리 및 시스템 간 일관성 유지 방안에 대해 고민하고 설계했습니다.

</aside>

프로젝트 배경

<aside> 💡

금융 도메인의 복잡성과 안정성을 경험하고자 PG 서비스를 선택했습니다. 단순한 CRUD 이상으로 보안, 동시성, 외부 연동, 예외 처리 등 백엔드 개발의 핵심 역량을 종합적으로 경험할 수 있는 프로젝트라고 생각했습니다.

</aside>


동작 흐름도

image.png

  1. 결제 요청 생성
    1. 가맹점 서버가 PG에 결제 요청을 보냅니다.
    2. PG는 HMAC 서명을 검증하고, 입력 데이터를 검증한 후 paymentKey를 생성합니다.
    3. 결제 정보와 로그를 데이터베이스에 저장하고, 결제 URL을 응답합니다.
  2. 외부 결제 시스템 연동
    1. PG가 결제 URL을 통해 외부 결제 시스템에서 결제를 진행합니다.
    2. 결제 완료 후 성공/실패 URL로 웹훅 형태로 콜백됩니다.
  3. 웹훅 처리
    1. 외부 결제 시스템(MockController)이 PG에 웹훅으로 결제 결과를 알립니다.
    2. PG는 서명을 검증하고, WebhookContext를 통해 상태에 따른 처리합니다.
    3. 결제 상태와 로그를 업데이트하고, 가맹점에 결과를 알립니다.
  4. 결제 상태 조회
    1. 가맹점이 paymentKey로 결제 상태를 조회합니다.
    2. PG는 서명을 검증하고, 데이터베이스에서 상태를 조회하여 응답합니다.