Skip to content

feat : PRD A1~A3 반영 (해커톤 레포 이관) - #41

Draft
yuyeol3 wants to merge 3 commits into
mainfrom
yuyeol3/feat/prd-a1-a3
Draft

yuyeol3 wants to merge 3 commits into
mainfrom
yuyeol3/feat/prd-a1-a3

Conversation

@yuyeol3

@yuyeol3 yuyeol3 commented Oct 26, 2026

Copy link
Copy Markdown
Collaborator

변경점 👍

해커톤 모노레포에서 머지된 PRD A1~A3 작업(PNU-2026-AI-Hackathon/pnuai-c-07-finfin2#42)을 Fin-BE로 옮겼습니다.

  • 27c0717: 원본 PR의 backend/, database/ 변경을 Fin-BE 경로로 옮긴 커밋입니다. 작성자는 원저자로 유지했습니다.
    • 텍스트 충돌은 SearchRequestPolicy의 import 한 줄뿐이었습니다. #33에서 추가된 List는 쓰이지 않아서 Set만 남겼습니다.
    • 모노레포에만 해당하는 변경(.gitignore, api/)은 제외했습니다.
  • 0c42380: 이관하면서 생긴 의미상 충돌을 수정했습니다(아래).
  • 7f525c2: 원본의 V7__update_saving_period_options.sql을 V9로 옮겼습니다(아래).

버그 해결 💊

원본 PR은 예금과 적금이 min_monthly_limit을 같이 쓰던 시점을 전제로 작성됐습니다. #32에서 예금 한도가 min/max_deposit_amount로 분리된 뒤로는 금액 하한 검증이 다음처럼 잘못 동작했습니다.

  • 단기 예금: min_monthly_limit이 null이라 하한 검사가 사실상 꺼져 있었습니다.
  • 단기 적금: 월 최소 납입액을 예치 총액과 비교하고 있었습니다(단위 불일치).
  • 파킹: min_monthly_limit과 비교하고 있었습니다. V8 주석에 따르면 파킹도 min_deposit_amount를 씁니다.

수정 후에는 상품 유형에 맞는 금액끼리 비교합니다. 금액은 원본 PR에 있던 normalizedMonthlyDeposit/normalizedDepositPrincipal로 정규화합니다.

상품 비교 금액 하한 컬럼
예금 예치 원금 (단기: 예치액, 목돈: 월저축액×기간) min_deposit_amount
적금 월 납입액 (단기: 예치액÷기간, 목돈: 월저축액) min_monthly_limit
파킹 예치액 min_deposit_amount

목돈 예금도 이번 수정부터 min_deposit_amount로 검증됩니다. #32 이후로는 검증되지 않던 부분입니다.

저축기간 옵션 마이그레이션 번호 (V7 → V9)

#35가 이 V7이 들어올 자리를 비워 두고 V8로 먼저 머지됐습니다. 그래서 #35 이후 서버를 띄운 개발 DB에는 V8까지 적용되어 있고, 여기에 V7이 들어오면 Flyway가 기동 시 검증에 실패합니다(Detected resolved migration not applied to database: 7., outOfOrder=false 기본값).

테스트는 매번 빈 DB에 V1부터 적용하므로 이 문제가 드러나지 않습니다. V9로 옮기면 V8이 적용된 DB와 빈 DB 모두에서 순서대로 적용됩니다. V7 번호는 비워 둡니다. V8은 ALTER만 하므로 빈 DB에서 category_option ID는 V7일 때와 같습니다.

테스트 💻

  • EligibilityBoundaryIntegrationTest에 예치금 하한 경계 케이스 5개를 추가했습니다(단기 예금, 단기 적금, 목돈 예금). 수정 전에는 3개가 실패하는 것을 확인했습니다.
  • ParkingProductServiceTest의 하한 테스트가 minDepositAmount를 보도록 바꿨습니다.
  • ./gradlew test(349개)와 ./gradlew integrationTest(123개)가 모두 통과합니다.
  • V8까지 적용된 로컬 DB 복사본에 bootRun으로 확인했습니다. V7일 때는 위 에러로 기동에 실패하고, V9일 때는 Current version: 8 → v9로 적용된 뒤 정상 기동합니다.

비고 ✏

  • #36을 대체합니다. 기존 PR에는 리뷰가 없어서 force-push 대신 새 브랜치로 다시 올렸습니다.
  • 원본 PR 리뷰에서 남은 항목(파킹 카드 필드를 V8 컬럼과 연결, 파킹 개수 중복 카운트, 정렬 테스트 정리)은 이 PR 위에 올리는 후속 PR에서 처리합니다.

zwo-n and others added 3 commits October 18, 2026 19:25
PNU-2026-AI-Hackathon/pnuai-c-07-finfin2#42 (33a2b2c)의 backend/, database/ 변경을 Fin-BE 경로로 옮겼다.
- backend/ → 루트, database/db/migration → src/main/resources/db/migration
- 충돌 해결: SearchRequestPolicy import (#33의 미사용 List 대신 Set)
- 모노레포 전용 변경(.gitignore, api/)은 제외
#32에서 예금 한도가 min/max_deposit_amount로 분리되었는데 PRD A1~A3 이관분은 min_monthly_limit만 비교하고 있었다.
- 예금: 예치 원금(단기 예치액, 목돈 월저축액×기간) vs min_deposit_amount
- 적금: 월 납입액(단기 예치액÷기간, 목돈 월저축액) vs min_monthly_limit
- 파킹: 예치액 vs min_deposit_amount (V8 기준 예금·파킹 공용)
#35의 V8이 먼저 적용된 DB에서 Flyway가 out-of-order 검증으로
기동에 실패하는 문제를 수정한다.
@github-actions

Copy link
Copy Markdown

Backend Code Health Report

Commit: 7f525c2

Metric Current Base Change
Line Coverage 88.2% 88.8% -0.5 pp ⚠️
Branch Coverage 69.6% 73.2% -3.6 pp ⚠️
Code Health 92.8 (A) 92.8 (A) +0.0 ✅
Duplicated Lines 0.9% 0.4% +0.5 pp ⚠️
High-complexity Methods 14 10 +4 ⚠️
PMD Issues 21 13 +8 ⚠️

Attention

  • src/main/java/apptive/fin/search/service/ProductDetailService.java:113 — Cognitive Complexity 27 / Cyclomatic Complexity 25
  • src/main/java/apptive/fin/myfin/service/MyFinService.java:216 — Cognitive Complexity 19 / Cyclomatic Complexity 10
  • src/main/java/apptive/fin/search/service/SearchService.java:173 — Cognitive Complexity 18
  • Duplicated block (27 lines): src/main/java/apptive/fin/search/service/MatchScoreService.java:370 ↔ src/main/java/apptive/fin/search/service/MatchScoreService.java:534
  • Duplicated block (16 lines): src/main/java/apptive/fin/calculator/service/DepositRateCalculator.java:46 ↔ src/main/java/apptive/fin/calculator/service/SavingRateCalculator.java:60

Code Issues

  • src/main/java/apptive/fin/search/service/MatchScoreService.java:408 — Unused Private Method: Avoid unused private methods such as 'isGovBankConditionExcluded(boolean)'.
  • src/main/java/apptive/fin/search/service/SearchService.java:564 — Unused Private Method: Avoid unused private methods such as 'sortedByAchievableRate(Collection)'.

Informational report only — these metrics do not block merging.

@yuyeol3
yuyeol3 marked this pull request as draft October 26, 2026 09:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants