Skip to content

heeejinin/Account

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

💰 Account(계좌) 시스템 개발

📌 간략 소개

Spring Boot와 Java를 이용하여 계좌API (계좌생성, 계좌해지, 계좌확인) , 거래정보API (잔액 사용, 잔액 사용 취소, 거래 확인)를 구현한다.

⚙Tech Stack

  • Framework : Spring Boot 3.3.5
  • Language : Java
  • Build : Gradle
  • JDK : JDK 1.8
  • Database : H2 Database
  • Library : JUnit5, Mockito, Lombok, JPA
  • Cache : Redis, RedisEmbedded

📚 프로젝트 개요

  • Account(계좌) 시스템은 사용자와 정보를 저장하고 있으며, 외부 시스템에서 거래를 요청할 경우 거래 정보를 받아서 계좌에서 잔액을 거래금액만큼 줄이거나(결제), 거래금액만큼 늘리는(결제 취소) 거래 관리 기능을 제공하는 시스템이다.
  • 구현의 편의를 위해 사용자 생성 등의 관리는 API로 제공하지 않고 프로젝트 시작 시 자동으로 데이터가 입력되도록, 계좌 추가/해지/확인, 거래 생성/거래취소/거래 확인의 6가지 API를 제공한다.
  • 거래금액을 늘리거나 줄이는 과정에서 여러 쓰레드 혹은 인스턴스에서 같은 계좌에 접근할 경우 동시성 이슈로 인한 LOST UPDATE가 발생할 수 있으므로 이 부분을 해결해야 합니다.

💡 주요 기능

✅ 계좌 관련 API

1. 계좌 생성 API

  • POST /account
  • 파라미터 : 사용자 아이디, 초기 잔액
  • 정책 : 사용자가 없는 경우, 계좌가 10개(사용자당 최대 보유 가능 계좌 수)인 경우 실패 응답
  • 성공 응답 : 사용자 아이디, 계좌번호, 등록일시

2. 계좌 해지 API

  • DELETE /account
  • 파라미터 : 사용자 아이디, 계좌 번호 3-2 Account(계좌) 시스템 개발
  • 정책 : 사용자 또는 계좌가 없는 경우, 사용자 아이디와 계좌 소유주가 다른 경우, 계좌가 이미 해지 상태인 경우, 잔액이 있는 경우 실패 응답
  • 성공 응답 : 사용자 아이디, 계좌번호, 해지일시

3. 계좌 확인 API

  • GET /account?user_id={userId}
  • 파라미터 : 사용자 아이디
  • 정책 : 사용자 없는 경우 실패 응답
  • 성공 응답 : List<계좌번호, 잔액> 구조로 응답(사용 중인 계좌만)

✅ 거래(Transaction) 관련 API

1. 잔액 사용 API

  • POST /transaction/use
  • 파라미터 : 사용자 아이디, 계좌 번호, 거래 금액
  • 정책 :
    • 사용자 없는 경우, 사용자 아이디와 계좌 소유주가 다른 경우, 계좌가 이미 해지 상태인 경우, 거래금액이 잔액보다 큰 경우, 거래금액이 너무 작거나 큰 경우 실패 응답
    • 해당 계좌에서 거래(사용, 사용 취소)가 진행 중일 때 다른 거래 요청이 오는 경우 해당 거래가 동시에 잘못 처리되는 것을 방지해야 한다.
  • 성공 응답: 계좌번호, 거래 결과 코드(성공/실패), 거래 아이디, 거래금액, 거래일시

2. 잔액 사용 취소 API

  • POST /transaction/cancel
  • 파라미터 : 거래 아이디, 계좌번호, 취소 요청 금액
  • 정책 :
    • 거래 아이디에 해당하는 거래가 없는 경우, 계좌가 없는 경우, 거래와 계좌가 일치하지 않는 경우 거래금액과 거래 취소 금액이 다른경우(부분 취소 불가능) 실패 응답
    • 1년이 넘은 거래는 사용 취소 불가능
    • 해당 계좌에서 거래(사용, 사용 취소)가 진행 중일 때 다른 거래 요청이 오는 경우 해당 거래가 동시에 잘못 처리되는 것을 방지해야 한다.
  • 성공 응답: 계좌번호, 거래 결과 코드(성공/실패), 거래 아이디, 거래금액, 거래일

3. 잔액 사용 확인 API

  • GET /transaction/{transactionId}
  • 파라미터 : 거래 아이디
  • 정책 : 해당 거래 아이디의 거래가 없는 경우 실패 응답
  • 성공 응답 : 계좌번호, 거래종류(잔액 사용, 잔액 사용 취소), 거래 결과 코드(성공/실패), 거래 아이디, 거래금액, 거래일시
  • 실패한 거래(사용/사용취소)도 거래를 확인할 수 있도록 합니다.

📝 구현 시 문제점

IntelliJ Community Version 사용으로 인한 문제점

1. Gradle 빌드 도구에서 빌드 및 테스트 실행을 Gradle로 할 때, AccountApplication 종료 후 Redis Server가 종료되지 않음.

  • 해결방안 : AccountApplication 종료 후 작업관리자를 통해 Redis Server를 강제 종료

(Gradle 빌드 도구에서 빌드 및 테스트 실행을 IntelliJ로 하면 해결된다고 하나, 이럴 경우 파라미터를 받아오지 못하는 문제가 생겨 활용하지 않음)

2. resources 폴더에 sql파일 생성 불가

  • 해결방안 : AccountApplication 실행 후 H2 DB에서 직접 쿼리를 작성하여 초깃값 생성

3. Http 요청 테스트 사용 불가

  • 해결방안 : Postman을 활용하여 실행테스트 진행

About

Account(계좌) 시스템 개발

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages