결제 시스템 (PG)
가맹점 API
카테고리 : 결제 시스템 (PG)
가맹점 API
개요
- 이번 프로젝트는 가맹점들이 자신의 관리자 페이지에서 필요한 데이터를 가져오기 위한 가맹점 API를 개발하는 것이었습니다. Java와 Spring Boot를 이용하여 개발되었으며, 데이터베이스는 MariaDB를 사용하고 Swagger를 이용하여 문서화하였습니다.
- 기간: 2021.04 ~ 2023.07
- 인원: 4명
기술 스택
- JAVA 11
- Spring Boot 2.7.7
- Springframework 5.3.24
- Spring Security
- JWT
- MariaDB
- JPA
- Querydsl
- Swagger
- Git
- Jenkins
기술적인 부분
- JWT(Json Web Token)를 사용하여 사용자 인증을 처리합니다
- Spring Security를 이용하여 사용자 권한 관리 및 인증 처리를 구현합니다
- Spring Boot와 Springframework를 사용하여 REST API를 구현합니다
- Swagger를 사용하여 API 문서화를 진행합니다
- Git을 사용하여 소스 코드를 관리하고 버전을 관리합니다
- Jenkins를 사용하여 빌드 및 배포 자동화를 구현합니다
- JPA와 Querydsl을 사용하여 데이터베이스와 소통합니다
기능 요약
- 가맹점 정보
- 결제 관리
- 영업점 관리
- SMS 결제
- 정산 관리
- 대시보드
- 공지사항
- 아이디 찾기, 비밀번호 변경
- 인증
상세 설명
가맹점 정보
- 가맹점 상세 정보 조회
- 가맹점의 상세 정보를 조회하는 기능입니다. 가맹점 번호를 입력하면 해당 가맹점의 상호명, 대표자명, 사업자 등록번호, 업종, 주소 등의 정보를 반환합니다.
- 가맹점 정보 수정
- 가맹점의 정보를 수정하는 기능입니다. 가맹점 번호와 수정할 정보를 입력하면 해당 가맹점의 정보를 수정합니다. 수정 가능한 정보에는 가맹점명, 대표자명, 사업자 등록번호, 업종, 주소, 연락처 등이 있습니다.
- 서비스별 수수료 정보 조회
- 결제 서비스별로 적용되는 수수료 정보를 조회하는 기능입니다. 서비스별로 적용되는 수수료율, 수수료 계산 방법 등의 정보를 반환합니다.
결제 관리
- 카드 거래 목록 조회
- 가맹점에서 발생한 카드 결제 거래 목록을 조회하는 기능입니다. 결제 건별로 거래일자, 결제 상태, 결제 금액 등의 정보를 반환합니다.
- 카드 거래 상세 보기
- 특정 카드 결제 거래에 대한 상세 정보를 조회하는 기능입니다. 거래번호를 입력하면 해당 거래에 대한 상세 정보를 반환합니다.
- 카드 거래 상단 집계 조회
- 가맹점에서 발생한 카드 결제 거래의 상단 집계 정보를 조회하는 기능입니다. 일자별 거래 건수, 거래 총액, 수수료 등의 정보를 반환합니다.
- 계좌이체 거래 거래 목록 조회
- 가맹점에서 발생한 계좌이체 결제 거래 목록을 조회하는 기능입니다. 결제 건별로 거래일자, 결제 상태, 결제 금액 등의 정보를 반환합니다.
- 계좌이체 거래 상세 보기
- 특정 계좌이체 결제 거래에 대한 상세 정보를 조회하는 기능입니다. 거래번호를 입력하면 해당 거래에 대한 상세 정보를 반환합니다.
- 계좌이체 거래 상단 집계 조회
- 맹점에서 발생한 계좌이체 결제 거래의 상단 집계 정보를 조회하는 기능입니다. 일자별 거래 건수, 거래 총액, 수수료 등의 정보를 반환합니다.
- 현금영수증 거래 거래 목록 조회
- 가맹점에서 발생한 현금영수증 발급 거래 목록을 조회하는 기능입니다. 거래별로 발급일자, 거래 상태, 발급 금액 등의 정보를 반환합니다.
- 현금 영수증 거래 상세 보기
- 특정 현금영수증 발급 거래에 대한 상세 정보를 조회하는 기능입니다. 거래번호를 입력하면 해당 거래에 대한 상세 정보를 반환합니다.
- 현금 영수증 거래 상단 집계 조회
- 가맹점에서 발생한 현금영수증 발급 거래의 상단 집계 정보를 조회하는 기능입니다. 일자별 발급 건수, 발급 총액, 수수료 등의 정보를 반환합니다.
- 영수증 보기
- 결제 완료된 거래에 대한 영수증 정보를 조회하는 기능입니다.
영업점 관리
- 영업점 목록 조회
- 등록된 모든 영업점 정보를 조회할 수 있는 기능입니다.
- 영업점 등록
- 새로운 영업점 정보를 등록할 수 있는 기능입니다.
- 영업점 연락처 정보 조회
- 특정 영업점의 연락처 정보를 조회할 수 있는 기능입니다.
- 영업점 연락처 정보 변경
- 특정 영업점의 연락처 정보를 변경할 수 있는 기능입니다.
- 영업점 임시 비밀번호 발급
- 특정 영업점에 대해 임시 비밀번호를 발급할 수 있는 기능입니다.
- 영업점 상태 조회
- 특정 영업점의 상태를 조회할 수 있는 기능입니다.
- 영업점 매출 목록 조회
- 특정 영업점의 매출 내역을 조회할 수 있는 기능입니다.
- 영업점 매출 목록 상단 집계 조회
- 특정 영업점의 매출 내역을 상태, 결제 수단, 거래 일자 등으로 필터링하여 상단 집계 정보를 조회할 수 있는 기능입니다.
- 영업점별 매출 상세 보기
- 특정 영업점의 매출 상세 내역을 조회할 수 있는 기능입니다.
- 영업점별 매출 상단 집계 조회
- 등록된 모든 영업점의 매출 내역을 상태, 결제 수단, 거래 일자 등으로 필터링하여 상단 집계 정보를 조회할 수 있는 기능입니다.
SMS 결제
- 건별 SMS 결제 요청
- 구매자의 휴대폰 번호와 결제 금액을 입력하여 건별로 결제 요청을 할 수 있는 기능입니다. SMS를 통해 결제가 가능합니다.
- 대량 SMS 결제 요청
- 구매자들의 휴대폰 번호와 결제 금액을 일괄적으로 입력하여 대량으로 결제 요청을 할 수 있는 기능입니다. SMS를 통해 결제가 가능합니다.
- SMS 결제 요청 취소
- SMS 결제 요청을 취소할 수 있는 기능입니다.
- SMS 결제 요청 목록 조회
- 결제 요청 상태, 결제 수단, 거래 일자 등으로 필터링하여 SMS 결제 요청 목록을 조회할 수 있는 기능입니다.
- SMS 결제 요청 상세 보기
- 결제 요청 번호를 입력하여 해당 건의 상세 정보를 조회할 수 있는 기능입니다.
- SMS 결제 요청 상단 집계 조회
- 결제 요청 상태, 결제 수단, 거래 일자 등으로 필터링하여 SMS 결제 요청 건수와 결제 금액 등의 상단 집계 정보를 조회할 수 있는 기능입니다.
정산 관리
- 정산거래일자별 내역 목록 조회
- 가맹점에서 발생한 거래 내역을 정산 거래일자별로 조회할 수 있는 기능입니다. 정산 거래일자별로 거래 내역 목록과 해당 거래 건수, 결제 금액 등의 정보를 확인할 수 있습니다.
- 정산거래일자별 집계 조회
- 정산 거래일자별로 거래 건수, 결제 금액 등의 정보를 상단 집계하여 조회할 수 있는 기능입니다.
대시보드
- 가맹점 대시보드 조회
- 가맹점의 대시보드 정보를 조회할 수 있는 기능입니다. 정산금액과 거래금액을 포함합니다.
공지사항
- 공지사항 목록
- 등록된 공지사항 목록을 조회할 수 있는 기능입니다.
- 공지사항 상세
- 선택한 공지사항의 상세 내용을 조회할 수 있는 기능입니다.
아이디 찾기, 비밀번호 변경
- ID 중복확인
- 사용 가능한 아이디인지 중복 여부를 확인할 수 있는 기능입니다.
- 아이디 찾기
- 가입된 이메일 정보를 입력하여 아이디를 찾을 수 있는 기능입니다.
- 비밀번호 변경
- 가입된 이메일 정보를 입력하여 비밀번호를 변경할 수 있는 기능입니다.
인증
- 로그인
- 사용자가 로그인을 요청하면 JWT로 인증을 처리하는 서버에 API 요청을 보내어 사용자 정보를 확인합니다
- 로그인이 성공하면 JWT 토큰을 발급받아 사용자에게 반환합니다
- 토큰 갱신
- 사용자가 토큰 갱신을 요청하면 JWT로 인증을 담당하는 서버에 API 요청을 보내어 사용자 정보를 확인합니다
- 인증이 성공하면 새로운 JWT 토큰을 발급받아 사용자에게 반환합
성과
- 가맹점 관리에 필요한 다양한 기능을 포함시켰습니다.
- 가맹점의 조회, 등록, 수정, 상태 변경 등 다양한 작업을 수행할 수 있게 되었습니다.
- 가맹점 API를 개발하여 가맹점들이 필요한 데이터를 보다 간편하게 가져올 수 있도록 도움을 주었습니다.
- 가맹점에서 제공하는 현금 영수증, SMS 결제 등 다양한 결제 수단을 통합적으로 관리할 수 있어 가맹점 관리의 효율성을 높일 수 있었습니다.
- 영업점 관리 기능을 통해 영업점 정보를 중앙에서 관리하고 매출 내역을 확인할 수 있어 가맹점의 업무 프로세스를 간소화하고 효율화할 수 있었습니다.
- 영수증 보기 API를 통해 가맹점이 발급한 영수증을 조회할 수 있어 소비자와의 불만 사항을 적극적으로 처리할 수 있었습니다.
- 인증과 관련된 로그인과 토큰 갱신 API를 구현하여, 사용자 인증 처리를 할 수 있게 되었습니다
- JWT를 사용하여 데이터 보안에 대한 이슈를 해결하였습니다.
- Swagger를 이용하여 문서화를 통해 API 사용자들이 API에 대한 이해도를 높일 수 있었습니다.
- Git과 Jenkins를 이용하여 협업 및 배포 과정에서 생산성과 안정성을 높였습니다.
- JPA와 Querydsl을 활용하여 높은 코드 가독성과 유지보수성 확보하였습니다
개선사항
- 현재 API에서 제공되는 기능들이 충분히 사용자들의 요구를 수용하는지, 혹은 추가적인 기능이 필요한지를 더 깊이 이해하고 검토해 볼 필요가 있습니다
- 현재 구현된 API의 보안 취약점을 점검하고, 추가적인 보안 기능을 구현하여 보안 측면에서 더욱 안전한 서비스를 제공할 필요가 있습니다
- 대량의 데이터 조회 시 성능 이슈가 발생하여, 이를 해결할 수 있는 캐싱 기능을 추가하는 것이 필요합니다.
- API의 안정성과 보안성을 높이기 위해 로깅과 모니터링을 강화하는 것이 필요합니다.
- 현재는 대리점 API만을 개발하였지만, 이에 대한 문서화나 개발 가이드 등을 함께 제공함으로써 API 사용자들의 편의성을 높일 수 있습니다.
- 보안적 측면에서 JWT 대신 OAuth 2.0을 이용한 인증 방식을 도입하면 더욱 안전한 인증 시스템을 구축할 수 있을 것입니다.
- 현재는 JPA와 Querydsl을 활용하여 SQL을 직접 작성하지 않고도 쉽게 데이터베이스를 조작할 수 있습니다. 하지만 대용량 데이터 처리에는 한계가 있을 수 있으므로, 이에 대한 대응 방안을 모색할 필요가 있습니다.
- Swagger를 활용한 API 문서화는 개발자들이 API를 이해하고 사용하기 쉽게 해주지만, UI/UX적인 면에서는 한계가 있을 수 있습니다. 이에 대한 대안을 고려할 필요가 있습니다.