Coder Social home page Coder Social logo

billing's Introduction

billing

목적

  • 빌링 시스템 개발

  • 카드결제 / 결제취소 / 결제정보 조회 REST API 개발

사용 기술

  • Maven Project
  • Java 8
  • Junit
  • Swagger
  • h2 database
  • jpa
  • security jwt

기술적인 집중 요소

  • 객체 지향의 기본 원리와 의미 있는 코드 작성
  • 라이브러리 및 기능 추가 시 이유 있는 선택과 사용 목적 고려
  • Junit을 사용하여 테스트 코드 작성
  • 대용량 트래픽 환경을 고려하여 WAS의 Scale-out 구조로 개발

REST API 사양

  1. 결제 API
  • 카드정보과 금액정보를 입력받아서 카드사와 협의된 string 데이터로 DB에 저장합니다.
  • request
    • required
      • 카드번호(10 ~ 16자리 숫자)
      • 유효기간(4자리 숫자, mmyy)
      • cvc(3자리 숫자)
      • 할부개월수 : 0(일시불), 1 ~ 12
      • 결제금액(100원 이상, 10억원 이하, 숫자)
    • optional
      • 부가가치세
    • response
      • 성공
        • 관리번호(unique id, 20자리)
        • 카드사에 전달한 string 데이터 : "공통 헤더부문" + "데이터 부문"
  1. 결제취소 API
  • 결제에 대한 전체취소는 1번만 가능합니다.
  • 부가가치세 정보를 넘기지 않는 경우, 결제데이터의 부가가치세 금액으로 취소합니다.
  • 할부개월수 데이터는 00(일시불)로 저장합니다.
  • request :
    • required
      • 관리번호(unique id, 20자리)
      • 취소금액
    • optional
      • 부가가치세
    • response
      • 성공
        • 관리번호(unique id, 20자리)
        • 카드사에 전달한 string 데이터 : "공통 헤더부문" + "데이터 부문"
  1. 데이터 조회 API
  • DB에 저장된 데이터를 조회해서 응답값으로 만들어줍니다.
  • request : 관리번호(unique id)
  • response
    • 성공
      • required
        • 관리번호(unique id)
        • 카드정보 : 암호화된 데이터를 복호화해서 데이터를 만들어주세요.
          • 카드번호 : 앞 6자리와 뒤 3자리를 제외한 나머지를 마스킹처리
          • 유효기간
          • cvc
        • 결제/취소 구분
        • 금액정보
          • 결제/취소 금액
          • 부가가치세
      • optional
        • 추가로 내려주면 좋을 데이터들을 자유롭게 추가해주세요.
  1. API 요청 실패시
  • 자유롭게 정의한 에러응답, 에러코드등을 내려줍니다.

제약사항

  • 단, 카드사와 통신하는 부분은 Embedded Database(ex. H2)에 string 데이터를 저장하는 것으로 대체하고 카드사로 전송하는 모든 요청은 성공이라고 가정합니다.
  • 저장하는 string 데이터 카드사로 전송하는 string 데이터를 공통헤더부문과 데이터부문을 합쳐 하나의 string(450자리)으로 만들어서 DB에 저장해주세요.
  • 부가가치세 optional 데이터이므로 값을 받지 않은 경우, 자동계산 합니다. 자동계산 수식 : 결제금액 / 11, 소수점이하 반올림 결제금액이 1,000원일 경우, 자동계산된 부가가치세는 91원입니다. 부가가치세는 결제금액보다 클 수 없습니다. 결제금액이 1,000원일 때, 부가가치세는 0원일 수 있습니다.
  • 카드정보 암/복호화 암/복호화 대상 데이터는 카드번호, 유호기간, cvc입니다. 카드정보는 모두 숫자로 이루어져 있으므로 하나의 string으로 합쳐서 암호화하고 데이터들 사이에 적당한 구 분자를 추가해주세요. ex. encrypt(카드정보|유효기간|cvc) 암호화된 데이터를 복화화했을 때 카드정보의 각 데이터를 사용할 수 있도록 객체화해주세요. 암/복호화 방식은 자유롭게 선택합니다.
  • 트랜잭션 데이터 관리 각 결제, 결제취소 데이터는 관리번호(unique id, 20자리)로 관리되어야 합니다. 취소데이터는 결제데이터와 연결되어있어야 합니다. 관리번호(unique id, 20자리)로 저장되어 있는 데이터를 조회할 수 있어야 합니다. 관리번호로 데이터 조회시에는 결제 혹은 결제취소 데이터 1건만 조회합니다.

실행 방법

  • billing.7z 압축 파일 해제
  • (윈도우 기준) 파일 경로 에서 실행 명령어 실행 (jre or jdk 필요)
  • mvn test package 시 target 파일에 InitialData.txt 복사 해야 정상 구동 됩니다.
cd billing
java -jar billing-0.0.1-SNAPSHOT.jar

API 확인 방법

DB 데이터 확인 방법

ERD

billing's People

Contributors

junshock5 avatar

Watchers

 avatar  avatar

billing's Issues

JUnit 테스트 작성

  • 부분취소 API를 구현하고 Test Case 작성
- 정책
1. 결제 한 건에 대해서 모두 취소가 될 때까지 부분 금액으로 계속 취소할 수 있습니다.
2. 부가가치세 검증 로직 : 결제금액의 부가가치세 = 모든 부분취소 부가가치세의 합
3. ex. 10,000원 결제시 1,000원씩 10번 취소 가능
4. "2. 결제취소 API"에 기능을 추가해도 되고 API를 추가해도 됩니다.(단, api interface는 동일하게 합니다.)

결제 데이터 CRUD JPA

  • H2 DB 연동
1. 결제 API
- 카드정보과 금액정보를 입력받아서 카드사와 협의된 string 데이터로 DB에 저장합니다

2.  결제취소 API
- 결제에 대한 전체취소는 1번만 가능합니다.
- 부가가치세 정보를 넘기지 않는 경우, 결제데이터의 부가가치세 금액으로 취소합니다.
- 할부개월수 데이터는 00(일시불)로 저장합니다

3. 데이터 조회 API
- DB에 저장된 데이터를 조회해서 응답값으로 만들어줍니다.
- request : 관리번호(unique id)

4. API 요청 실패시 적절한 에러코드 응답

결제 시스템 정책

  1. 저장하는 string 데이터
  2. 부가가치세
  3. 카드정보 암/복호화
  4. 트랜잭션 데이터 관리

인증 토큰 spring security, JWT

  • API 인증을 위해 JWT(Json Web Token)를 이용해서 Token 기반 API 인증 기능을 개발
  1. 각 API 호출시에 HTTP Header에 발급받은 토큰을 가지고 호출
  2. signup 계정생성 API: ID, PW를 입력 받아 내부 DB에 계정을 저장하고 토큰을 생성하여 출력한다.
  3. 단, 패스워드는 안전한 방법으로 저장한다.
  4. signin 로그인 API: 입력으로 생성된 계정 (ID, PW)으로 로그인 요청하면 토큰을 발급한다.
참조
https://medium.com/swlh/spring-boot-security-jwt-hello-world-example-b479e457664c
https://github.com/murraco/spring-boot-jwt

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.