결제 시스템 (PG)

결제 API

결제 API

개요

  • 당사의 결제 서비스는 JAVA 11, Spring Boot 2.7.7, Springframework 5.3.24, Spring Security, JWT, MariaDB, MyBatis, Swagger, Git, Jenkins 등 다양한 기술 스택을 활용하여 개발되었습니다. 이 서비스는 온라인 결제 서비스의 기능을 제공하며, 정산 내역 조회, 회원 가입, 인증 등 다양한 기능을 제공합니다. 서비스 개발 및 유지보수 과정에서는 API 문서화 및 테스트를 위해 Swagger가 활용되었고, 코드 관리 및 빌드 프로세스에는 Git과 Jenkins가 사용되었습니다. 또한, 보안 강화를 위해 Spring Security와 JWT가 도입되어 인증 및 권한 부여 기능을 구현하였습니다
  • 기간: 2021.04 ~ 2023.07
  • 인원: 4명

기술 스택

  • JAVA 11
  • Spring Boot 2.7.7
  • Springframework 5.3.24
  • Spring Security
  • JWT
  • MariaDB
  • MyBatis
  • Swagger
  • Git
  • Jenkins

기술적인 부분

  • JWT(Json Web Token)를 사용하여 사용자 인증을 처리합니다
  • Spring Security를 이용하여 사용자 권한 관리 및 인증 처리를 구현합니다
  • MariaDB를 사용하여 데이터 저장소를 구축합니다
  • MyBatis를 사용하여 SQL 쿼리를 작성하고 실행합니다
  • Spring Boot와 Springframework를 사용하여 REST API를 구현합니다
  • Swagger를 사용하여 API 문서화를 진행합니다
  • Git을 사용하여 소스 코드를 관리하고 버전을 관리합니다
  • Jenkins를 사용하여 빌드 및 배포 자동화를 구현합니다

기능 요약

  • 카드 승인
  • 빌링키 거래
  • 현금 영수증 거래
  • 거래내역
  • 고객센터
  • 서비스 신청
  • 영업점 가입 관리
  • 영업점 관리
  • 인증
  • 정산 내역
  • 회원 가입

상세 설명

카드 승인

  • 결제 승인 비인증
    • 요청 AES256 암호화 데이터 복호화 하여 객체에 매핑 처리합니다
    • 가맹점 ID로 해당하는 원천사에게 결제 요청 처리합니다
    • 사용자가 카드로 결제를 요청하면, 해당 API를 호출하여 결제 승인을 받을 수 있습니다. 이때, 사용자 인증 과정이 없는 비인증 결제 승인 방식을 사용합니다
  • 결제 취소
    • 결제를 취소하기 위해 해당 API를 호출할 수 있습니다
  • SMS 결제
    • SMS를 통해 인증번호를 전송하고, 해당 인증번호를 입력하면 결제가 완료되는 결제 방식입니다
  • SMS 결제 정보
    • SMS를 통해 결제를 완료한 이후에는, 해당 API를 호출하여 결제 정보를 확인할 수 있습니다
  • SMS 결제 상태
    • SMS를 통한 결제의 상태를 확인하기 위해서는 해당 API를 호출할 수 있습니다
  • SMS 영수증 정보
    • SMS를 통해 결제한 이후에는, 해당 API를 호출하여 영수증 정보를 확인할 수 있습니다

빌링키 거래

  • 빌링키 등록
    • 사용자의 카드 정보를 등록하여 빌링키를 발급받을 수 있습니다
  • 빌링키 등록 확인
    • 빌링키 등록이 완료된 후, 해당 API를 호출하여 등록된 빌링키 정보를 확인할 수 있습니다
  • 빌링키 취소
    • 등록된 빌링키를 취소하기 위해 해당 API를 호출할 수 있습니다
  • 빌링키 결제 요청
    • 등록된 빌링키를 이용하여 결제를 요청할 수 있습니다

현금 영수증 거래

  • 현금 영수증 발급 요청
    • 현금 영수증 발급을 위해서 해당 API를 호출할 수 있습니다
  • 현금 영수증 발급 취소
    • 현금 영수증 발급 취소를 위해 해당 API를 호출할 수 있습니다

거래내역

  • 가맹점 거래내역 조회
    • 가맹점에서 진행한 모든 거래 내역을 조회할 수 있습니다. 조회 기간, 거래 상태, 결제 수단, 거래 금액 등의 조건을 이용해 검색할 수 있습니다
  • 가맹점 상세 거래내역 조회
    • 가맹점에서 진행한 특정 거래의 상세 내역을 조회할 수 있습니다. 결제 상태, 거래 일시, 결제 수단, 결제 금액 등의 정보를 확인할 수 있습니다
  • 가맹점 계좌이체, 가상계좌 거래내역 조회
    • 가맹점에서 진행한 계좌이체 및 가상계좌 거래 내역을 조회할 수 있습니다. 조회 기간, 거래 상태, 거래 금액 등의 조건을 이용해 검색할 수 있습니다
  • 가맹점 현금영수증 거래내역 조회
    • 가맹점에서 발급한 현금영수증의 거래 내역을 조회할 수 있습니다. 조회 기간, 발급 상태, 거래 금액 등의 조건을 이용해 검색할 수 있습니다

고객센터

  • 공지사항 목록 조회
    • 결제 서비스에서 제공하는 공지사항의 목록을 조회할 수 있습니다. 공지사항의 제목, 작성일 등의 정보를 확인할 수 있습니다
  • 공지사항 상세 조회
    • 특정 공지사항의 상세 내용을 조회할 수 있습니다. 공지사항의 제목, 작성일, 내용 등의 정보를 확인할 수 있습니다

서비스 신청

  • 서비스 신청
    • 가맹점이 결제 서비스를 신청할 수 있도록 합니다. 서비스 신청시 결제 서비스 코드 조회 기능을 이용해 가맹점에서 이용 가능한 결제 서비스 코드를 확인할 수 있습니다
  • 서비스 신청시 코드 조회
    • 가맹점에서 이용 가능한 결제 서비스 코드 목록을 조회할 수 있습니다
  • 대리점 정보 조회
    • 가맹점이 대리점 정보를 조회할 수 있습니다. 대리점 이름, 대표자명, 전화번호 등의 정보를 확인할 수 있습니다
  • 판매자 조회 - 대리점 등록 처리 시 사용
    • 대리점 등록 시 사용됩니다. 판매자 정보를 조회할 수 있습니다

영업점 가입 관리

  • 영엄점 회원 가입
    • 새로운 영업점 회원을 가입시킬 수 있습니다
  • 영업점 회원가입 - 영업점 SMS 발신 정보 조회
    • 영업점 SMS 발신 정보를 조회할 수 있습니다

영업점 관리

  • 영업점 조회
    • 가맹점이 등록한 영업점 정보를 조회할 수 있습니다
  • 영엄점 상태 변경
    • 가맹점이 등록한 영업점의 상태를 변경할 수 있습니다
  • 영업점 매출 - 집계
    • 등록한 영업점의 매출을 집계하여 조회할 수 있습니다
  • 영업점 매출 - 집계 상세
    • 등록한 영업점의 매출을 집계하여 상세하게 조회할 수 있습니다
  • 영업점 매출 상세 - 집계
    • 등록한 영업점의 매출 상세 내역을 집계하여 조회할 수 있습니다
  • 영업점 추가 - SMS 발신 목록
    • 등록한 영업점에게 SMS를 발송할 수 있는 목록을 추가할 수 있습니다
  • 영업점 추가 - SMS 발신 요청
    • 등록한 영업점에게 SMS를 발송하는 요청을 보낼 수 있습니다
  • 영업점 추가 삭제 - SMS 발신 목록 중 미등록 삭제
    • 등록한 영업점에게 발송하기 전 등록되지 않은 번호를 제거할 수 있습니다

인증

  • 로그인
    • 사용자가 로그인을 요청하면 JWT로 인증을 처리하는 서버에 API 요청을 보내어 사용자 정보를 확인합니다
    • 로그인이 성공하면 JWT 토큰을 발급받아 사용자에게 반환합니다
  • 토큰 갱신
    • 사용자가 토큰 갱신을 요청하면 JWT로 인증을 담당하는 서버에 API 요청을 보내어 사용자 정보를 확인합니다
    • 인증이 성공하면 새로운 JWT 토큰을 발급받아 사용자에게 반환합니다

정산 내역

  • 정산 현황
    • 등록한 영업점의 정산 현황을 조회합니다
  • 정산 내역 - 집계
    • 등록한 영업점의 정산 내역을 집계하여 조회합니다
  • 정산 내역 - 상세 내역
    • 등록한 영업점의 정산 내역을 상세하게 조회합니다

회원 가입

  • 아이디 찾기
  • 비밀번호 찾기
  • 간편 회원 가입
  • EMAIL 중복 확인
  • ID 중복 확인
  • 비밀번호 변경
  • 알림 상태 변경

성과

  • 결제 서비스의 결제 API를 설계 및 구현하여, 결제와 관련된 다양한 기능을 API로 제공할 수 있게 되었습니다
  • 인증과 관련된 로그인과 토큰 갱신 API를 구현하여, 사용자 인증 처리를 할 수 있게 되었습니다
  • JWT를 사용하여 데이터 보안에 대한 이슈를 해결하였습니다.
  • Swagger를 이용하여 문서화를 통해 API 사용자들이 API에 대한 이해도를 높일 수 있었습니다.
  • 정산 내역 조회와 관련된 정산 현황, 정산 내역 집계, 정산 내역 상세 내역 조회 API를 구현하여, 영업점이 자신의 정산 내역을 쉽게 확인할 수 있게 되었습니다
  • 회원 가입과 관련된 아이디 찾기, 비밀번호 찾기, 간편 회원 가입, EMAIL 중복 확인, ID 중복 확인, 비밀번호 변경, 알림 상태 변경 API를 구현하여, 사용자 관리와 관련된 기능을 API로 제공할 수 있게 되었습니다

개선사항

  • 현재 API에서 제공되는 기능들이 충분히 사용자들의 요구를 수용하는지, 혹은 추가적인 기능이 필요한지를 더 깊이 이해하고 검토해 볼 필요가 있습니다
  • 현재 구현된 API의 보안 취약점을 점검하고, 추가적인 보안 기능을 구현하여 보안 측면에서 더욱 안전한 서비스를 제공할 필요가 있습니다
  • 대량의 데이터 조회 시 성능 이슈가 발생하여, 이를 해결할 수 있는 캐싱 기능을 추가하는 것이 필요합니다.
  • API의 안정성과 보안성을 높이기 위해 로깅과 모니터링을 강화하는 것이 필요합니다.
  • 현재는 대리점 API만을 개발하였지만, 이에 대한 문서화나 개발 가이드 등을 함께 제공함으로써 API 사용자들의 편의성을 높일 수 있습니다.
  • 보안적 측면에서 JWT 대신 OAuth 2.0을 이용한 인증 방식을 도입하면 더욱 안전한 인증 시스템을 구축할 수 있을 것입니다.
  • Swagger를 활용한 API 문서화는 개발자들이 API를 이해하고 사용하기 쉽게 해주지만, UI/UX적인 면에서는 한계가 있을 수 있습니다. 이에 대한 대안을 고려할 필요가 있습니다.

© 2020. All rights reserved.

SIKSIK