네이버통장 개발팀의 인턴으로 2개월간 근무한 것을 기록한 레포입니다.
💻
본 과제 - 예약입금 API서버, Batch서버 구축 👩🏻 네이버 통장의 예약입금이란?
- 잔액 기준) 네이버 통장의 잔액이 지정 금액 이하일 경우 외부통장으로부터 지정 금액을 입금
"잔액이 10만원 이하일 때 30만원을 입금해줘"
- 지정일 기준) 매 월 지정일에 외부통장으로부터 지정 금액을 입금
"매 월 14일에 30만원을 입금해줘"
유즈 케이스
세부 기능
API 서버
기능 명 | 기능 설명 |
---|---|
예약입금 신규추가 | 잔액 기준 예약입금 추가 지정일 기준 예약입금 추가 |
예약입금 수정 | 지정 잔액과 입금금액을 변경 지정일과 입금금액을 변경 |
예약입금 조회 | 사용자가 보유한 예약입금을 전체 조회 |
예약입금 중지 | 활성화 상태인 예약입금의 상태를 비활성화로 변경 |
예약입금 삭제 | 예약입금을 삭제 |
네이버 통장 인출 | 단순히 네이버통장의 금액만 차감 |
네이버 통장 입금 | 단순히 네이버통장의 금액만 증가 |
배치
- 입금 실행이란? 네이버통장의 잔액 증가, 외부통장의 잔액 감소
- 실제론
외부통장의 잔액
를 건드리지 않지만, 해당 프로젝트에서는 차감시킴.
기능 명 | 기능 설명 |
---|---|
잔액 기준 예약입금 Job | 잔액 기준 예약 입금 실행 |
지정일 기준 예약입금 Job | 지정일 기준 예약 입금 실행 |
DB
DB configuration
spring.datasource.url=[jdbc:mysql://ip:port/database]
spring.datasource.username=[root]
spring.datasource.password=[password]
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
DB Modeling
- 동일한 예약입금 추가를 방지
- 하나의 네이버통장에서 지정잔액과 입금금액의 조합은 고유합니다.
5만원 미만일 경우 10만원 입금
과5만원 미만일 경우 15만원 입금
은 동시에 존재할 수 없습니다. - 하나의 네이버통장에서 지정일과 입금금액의 조합은 고유합니다.
15일에 10만원 입금
과15일에 15만원 입금
은 동시에 존재할 수 없습니다.
- 하나의 네이버통장에서 지정잔액과 입금금액의 조합은 고유합니다.
배치 Job 구조도
공통 제한 사항
- 외부 통장의 잔액이 입금금액(deposit_amount)이상인 지(= 출금 가능한 지)
30만원 있는데 50만원 출금 불가
- 네이버통장의 최대 보유 가능 금액 미만인 지
보유 가능 금액인 1억을 초과하는 지
1. 지정 잔액 기준
-
제한 사항
- 네이버통장의 잔액이 지정 잔액보다 적은 지
잔액이 10만원 미만일 때 예약입금을 설정했는데 잔액이 40만원으로 더 큰 경우
- 네이버통장의 잔액이 지정 잔액보다 적은 지
-
구조도
2. 지정 일 기준
-
제한 사항
- 오늘 날짜
2021-09-20
라면 20일로 지정된 예약입금들만 확인
- 오늘 날짜
-
구조도
- 말일 이후로 설정된 예약 입금은 말일에 일괄 처리
- 2월 같은 경우 28일까지밖에 없으므로, 29,30,31일의 예약 입금을` 일괄 처리
- 4,6,9,11도 마찬가지로 30일에 30,31일의 예약 입금을 일괄 처리
- 말일 이후로 설정된 예약 입금은 말일에 일괄 처리
로깅
- 사내 로깅 시스템인 NELO로 로그 전송
빌드 & 배포
- 젠킨스로 빌드 후, 사내 배포 시스템을 이용해 서버에 배포
스터디
문제 해결
추가적으로 사용한 것들
- Swagger (API 명세 자동화)
- VisualVM (배치 프로파일링용)
- 멀티 스레드 스텝
기술스택
- AdoptopenJDK1.8
- SpringBatch
- SpringBoot
- MySQL
- 사내 플랫폼
- 사내 VM 발급, Jenkins + NDeploy 배포
- NELO (사내 로깅 서비스)
Version
- Spring Boot: 2.5.3
- Gradle: 7.1.1