Commit f8d6242
authored
## 🔗 Related Issue
<!-- 이슈 번호를 작성하여 종료시켜주세요 -->
- Closes #79
## 📝 Summary
<!-- 작업한 기능을 설명해주세요 -->
### 1. 목표 생성 및 조회 시 자산 동기화 로직 개선
문제점:
- 목표 생성 시점의 계좌 잔액이 실제 은행 잔액과 달라 목표 달성률이 부정확한 문제 발생. 또한, 목표 거래내역 조회 시 최신
거래내역이 반영되지 않는 문제 발생.
해결:
- AssetBalanceService 도입: 자산 동기화와 최신 잔액 조회를 담당하는 별도 서비스를 분리하여 재사용성 확보.
- 최신 잔액 조회 로직 강화: BankAccount의 잔액 필드뿐만 아니라, BankTransaction의 가장 최신
거래내역(afterBalance)을 조회하여 더 정확한 잔액을 가져오도록 개선.
- 목표 생성(GoalCommandService): 목표 생성 직전에 자산 동기화를 수행하여 정확한 시작
잔액(startAmount)으로 목표를 생성하도록 변경.
- 목표 조회(GoalQueryService, GoalListQueryService): 상세/목록 조회 시마다 자산 동기화를
수행하여 실시간 잔액을 반영한 달성률(achievementRate)과 모은 금액(savedAmount)을 제공.
### 2. 목표 거래내역 조회 동기화 문제 해결 (GoalLedgerFacade 도입)
문제점:
- 트랜잭션 격리 수준 문제로 인해, 자산 동기화 직후에 조회 API를 호출해도 최신 내역이 보이지 않는 현상 발생. 또한, 자산
데이터는 수집되었으나 가계부 데이터로 변환되지 않는 누락 구간 발생.
해결:
- GoalLedgerFacade 패턴 적용: 트랜잭션을 분리하여 [자산 동기화(TX1) -> 가계부 동기화(TX2) ->
조회(TX3)] 순서로 실행되도록 구조 변경.
- 가계부 동기화 로직 보완: 새 데이터 유무와 관계없이 목표 기간(시작일~오늘)에 대해 강제로 가계부 동기화를 수행하도록 하여
데이터 누락 방지.
- 조회 시작 시점 변경: 목표 생성 시점(createdAt) 이후의 거래내역만 조회하도록 필터링 조건 수정.
- 응답 필드 추가: 거래내역 응답(LedgerListResponse)에 거래 후 잔액(afterBalance) 필드 추가.
### 3. 목표 상태 관리 및 계좌 연결 로직 고도화
상태 변경 로직 (GoalStatusChangeService):
- 성공 조건: (현재 잔액 - 시작 잔액) >= 목표 금액 일 때 COMPLETE 처리.
- 실패 조건: 목표 기한(endDate)이 지났는데 미달성 시 FAILED 처리.
- 실시간 상태 반영: 스케줄러뿐만 아니라 목표 조회 시점에도 상태 체크 로직을 수행하여 즉시 반영되도록 개선.
계좌 연결 해제:
- 목표가 COMPLETE 또는 FAILED 상태로 종료될 때, 연결된 계좌(bankAccount)를 NULL로 설정하여 즉시
연결 해제되도록 수정.
- 완료된 목표 조회 시 예외 처리 추가.
### 4. 트랜잭션 처리 개선
외부 API 호출이 포함된 자산 동기화 로직(AssetFetchService)을 REQUIRES_NEW로 분리하여, 동기화 실패가
전체 비즈니스 로직(목표 조회 등)에 영향을 주지 않도록 격리.
## 🔄 Changes
<!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 -->
- [x] API 변경 (추가/수정)
- [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직)
- [ ] 설정 또는 인프라 관련 변경
- [x] 리팩토링
## 💬 Questions & Review Points
기능들은 다 구현 되긴 했는데 목표 조회 시 savedamount가 처음 api호출시에는 안 바뀌고 두번째부터 바뀌는 이슈가
있습니다...! 이건 아직 해결을 못해서 조금 더 확인해보겠습니당..
## 📸 API Test Results (Swagger)
### 목표 생성
<img width="2319" height="1174" alt="image"
src="https://github.com/user-attachments/assets/e1f301ba-f73f-4bcb-9e98-0b51e31f9957"
/>
### 목표 상세 조회 (15,000원 입금 후)
모은 금액, 달성률 등이 잘 업데이트 됨.
<img width="2323" height="987" alt="image"
src="https://github.com/user-attachments/assets/922eb15c-887d-45d5-805d-17372f5af2ce"
/>
### 목표 거래내역 조회
<img width="2323" height="1057" alt="image"
src="https://github.com/user-attachments/assets/bab3740c-eba8-4e21-8c10-fa3ea357418f"
/>
### 목표 조회(미션 성공 한 경우)
<img width="2325" height="908" alt="image"
src="https://github.com/user-attachments/assets/2bebe546-37c8-4977-8860-c8896e164d10"
/>
## ✅ Checklist
- [x] API 테스트 완료
- [x] 테스트 결과 사진 첨부
- [x] 빌드 성공 확인 (./gradlew build)
1 parent cc9a4e9 commit f8d6242
17 files changed
Lines changed: 314 additions & 38 deletions
File tree
- src/main/java/org/umc/valuedi/domain
- asset
- entity
- repository/bank/bankTransaction
- service
- command
- goal
- controller
- converter
- dto/response
- entity
- service
- command
- query
- ledger
- converter
- dto/response
- service/command
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
96 | 96 | | |
97 | 97 | | |
98 | 98 | | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
99 | 103 | | |
Lines changed: 3 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
22 | 25 | | |
23 | 26 | | |
24 | 27 | | |
| |||
Lines changed: 60 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
Lines changed: 31 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
12 | 13 | | |
| 14 | + | |
13 | 15 | | |
14 | 16 | | |
15 | 17 | | |
| |||
21 | 23 | | |
22 | 24 | | |
23 | 25 | | |
| 26 | + | |
24 | 27 | | |
25 | 28 | | |
26 | 29 | | |
| |||
35 | 38 | | |
36 | 39 | | |
37 | 40 | | |
| 41 | + | |
38 | 42 | | |
39 | 43 | | |
40 | 44 | | |
41 | 45 | | |
42 | 46 | | |
43 | | - | |
| 47 | + | |
44 | 48 | | |
45 | 49 | | |
46 | 50 | | |
| |||
85 | 89 | | |
86 | 90 | | |
87 | 91 | | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
88 | 95 | | |
89 | 96 | | |
90 | 97 | | |
| |||
111 | 118 | | |
112 | 119 | | |
113 | 120 | | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
114 | 144 | | |
115 | 145 | | |
116 | 146 | | |
| |||
Lines changed: 3 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| 14 | + | |
14 | 15 | | |
15 | 16 | | |
16 | 17 | | |
17 | | - | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
34 | | - | |
| 34 | + | |
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
| |||
158 | 158 | | |
159 | 159 | | |
160 | 160 | | |
161 | | - | |
| 161 | + | |
162 | 162 | | |
163 | 163 | | |
164 | 164 | | |
Lines changed: 2 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
124 | 124 | | |
125 | 125 | | |
126 | 126 | | |
| 127 | + | |
| 128 | + | |
127 | 129 | | |
128 | 130 | | |
129 | 131 | | |
| |||
Lines changed: 8 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
| 7 | + | |
6 | 8 | | |
7 | 9 | | |
8 | 10 | | |
| |||
18 | 20 | | |
19 | 21 | | |
20 | 22 | | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
21 | 29 | | |
22 | 30 | | |
23 | 31 | | |
| |||
Lines changed: 4 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
91 | 91 | | |
92 | 92 | | |
93 | 93 | | |
94 | | - | |
| 94 | + | |
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
| 98 | + | |
98 | 99 | | |
99 | 100 | | |
100 | | - | |
| 101 | + | |
101 | 102 | | |
102 | 103 | | |
103 | 104 | | |
| 105 | + | |
104 | 106 | | |
105 | 107 | | |
106 | 108 | | |
107 | 109 | | |
108 | 110 | | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | 111 | | |
Lines changed: 69 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
Lines changed: 35 additions & 14 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
| 7 | + | |
| 8 | + | |
6 | 9 | | |
7 | 10 | | |
8 | 11 | | |
9 | 12 | | |
10 | 13 | | |
11 | 14 | | |
12 | 15 | | |
| 16 | + | |
13 | 17 | | |
14 | 18 | | |
15 | 19 | | |
16 | 20 | | |
17 | 21 | | |
18 | 22 | | |
19 | | - | |
| 23 | + | |
20 | 24 | | |
21 | | - | |
22 | | - | |
| 25 | + | |
23 | 26 | | |
24 | 27 | | |
25 | | - | |
| 28 | + | |
26 | 29 | | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
33 | | - | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
34 | 42 | | |
| 43 | + | |
| 44 | + | |
35 | 45 | | |
36 | | - | |
37 | | - | |
38 | | - | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
39 | 60 | | |
40 | 61 | | |
41 | 62 | | |
0 commit comments