결제 시스템 (PG)
결제 API
카테고리 : 결제 시스템 (PG)
결제 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적인 면에서는 한계가 있을 수 있습니다. 이에 대한 대안을 고려할 필요가 있습니다.