결제 시스템 (PG)

가맹점 API

가맹점 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적인 면에서는 한계가 있을 수 있습니다. 이에 대한 대안을 고려할 필요가 있습니다.

© 2020. All rights reserved.

SIKSIK