Skip to content

Repository files navigation

💰 Peerfolio Backend

경제적 여건이 유사한 Peer Group과의 비교를 통해 사용자의 투자행동과 위험요인을 점검하는 AI 금융 분석 서비스

Peerfolio는 사용자의 소득, 지출, 저축 목표, 자산 및 부채를 기반으로 경제적 여건이 유사한 Peer Group을 구성하고,
사용자와 Peer Group의 금융 자산 구성 차이를 비교하여 현재의 투자행동을 객관적으로 점검할 수 있도록 돕는 서비스입니다.

특정 금융상품을 추천하거나 수익을 예측하지 않으며, Peer Group의 평균은 적정 포트폴리오가 아닌 비교를 위한 참고 기준으로 활용합니다.


💡 Why Peerfolio?

기존 투자 서비스가 시장·종목·수익률 중심의 정보를 제공한다면,
Peerfolio는 나와 경제적 여건이 유사한 사람들과의 비교를 통해 현재의 투자행동을 해석합니다.

Peer 평균을 정답이나 추천 포트폴리오로 제시하지 않고, 사용자가 자신의 자산 편중과 위험요인을 스스로 점검할 수 있도록 비교 근거를 제공합니다.


✨ 주요 기능

🔐 인증 및 사용자 관리

  • 이메일 기반 회원가입 / 로그인 / 로그아웃
  • Spring Security + JWT 기반 인증 및 인가
  • BCrypt 기반 비밀번호 암호화
  • SMTP 기반 이메일 인증
  • 회원 정보 조회 및 회원 탈퇴

💰 금융 정보 관리

  • 월수입, 고정지출, 저축목표, 보유자산, 부채 관리
  • 예·적금·채권 / 국내주식 / 해외주식 / 대체·고위험자산 관리
  • 순자산 및 총 금융 자산 계산
  • 금융 데이터 입력값 검증 및 동시 저장 안정성 처리

👥 Peer Matching & Benchmark

  • 경제적 여건을 기반으로 사용자 간 유사도 계산
  • 유사도 기반 Peer Group 구성
  • Peer Group의 금융 프로필 및 투자 자산 Benchmark 계산
  • 사용자와 Peer Group의 자산 금액 및 구성 비율 비교
  • 익명 Peer 카드 및 1:1 상세 금융 정보 비교

📊 투자행동 위험 점검

  • 사용자와 Peer Group 간 자산 구성 차이 분석
  • 자산 집중도, 부채 및 고정지출 부담 등을 기반으로 위험 점수 계산
  • 0 ~ 100 범위의 위험 점수 및 LOW / MEDIUM / HIGH 위험 단계 산출
  • 금융 정보 변경 여부를 기반으로 불필요한 재분석 방지

🤖 AI 금융 분석 및 챗봇

  • Peer Benchmark와 위험 분석 결과를 기반으로 OpenAI 금융 분석 문구 생성
  • 개별 Peer가 아닌 집계된 Peer Group 데이터를 AI 분석에 활용
  • 사용자의 최신 금융 정보와 분석 결과를 기반으로 금융 챗봇 제공
  • 챗봇 응답별 사용자 피드백 저장 및 중복 제출 방지

🛠 Tech Stack

Category Stack
Language Java 21
Framework Spring Boot
ORM Spring Data JPA
Database MySQL
Security Spring Security, JWT, BCrypt
Email Spring Mail, SMTP
AI OpenAI API
API Docs Swagger / OpenAPI
Build Gradle
Infra Docker, Docker Compose
CI/CD GitHub Actions
Deploy AWS EC2

🏗 Backend Architecture

Peerfolio Backend는 도메인 중심 패키지 구조를 사용합니다.

src/main/java/com/example/peerfolio
├── domain
│   ├── auth
│   ├── user
│   ├── emailverification
│   ├── financialinfo
│   ├── financialprofile
│   ├── financialasset
│   ├── peermatch
│   ├── analysisresult
│   ├── chatmessage
│   └── chatfeedback
│
└── global
    ├── apiPayload
    ├── config
    ├── openai
    ├── security
    └── util

각 기능을 독립적인 도메인으로 분리하고, 공통 API 응답, Security, OpenAI 연동 및 설정은 global 영역에서 관리했습니다.
Peer Similarity, Benchmark, Risk Score 등의 계산 로직은 별도의 Calculator로 분리하여 비즈니스 로직의 역할을 명확하게 구성했습니다.


🔄 Analysis Flow

사용자 금융 정보 입력
        ↓
경제적 여건 기반 Peer Matching
        ↓
Peer Group Benchmark 계산
        ↓
사용자와 Peer Group의 자산 구성 비교
        ↓
서버 기반 위험 점수 / 위험 단계 계산
        ↓
OpenAI 분석 문구 생성
        ↓
AnalysisResult 저장
        ↓
분석 결과 기반 금융 챗봇

🗃 ERD

User를 중심으로 금융 프로필과 금융 자산을 관리하고, Peer Matching 결과와 금융 분석 및 챗봇 데이터를 연결하는 구조로 설계했습니다.

Peerfolio ERD

ERD는 MVP의 핵심 데이터 구조를 기준으로 작성되었습니다.


👥 Members

Member Contribution
홍진우 (@j2nooh) 프로젝트 기본 설정, User/Auth API, Spring Security + JWT 인증/인가, SMTP 이메일 인증, FinancialProfile / FinancialAsset API, OpenAI 기반 금융 챗봇 API, 챗봇 피드백 API
주해윤 (@uaeoon) Peer Matching 및 Benchmark 로직, 투자 위험 점수 계산, OpenAI 기반 금융 분석 API, Peer 카드 / 1:1 상세 비교 API, Docker 환경 구성, GitHub Actions CI/CD 및 AWS EC2 배포

📚 API Documentation

Swagger를 통해 주요 Backend API의 요청/응답 명세를 문서화했습니다.

Domain 주요 기능
Auth 이메일 인증, 회원가입, 로그인, 로그아웃
User 사용자 정보 조회, 회원 탈퇴
Financial Info 금융 정보 저장 / 조회 / 수정
Analysis Peer Matching 및 AI 금융 분석
Peer Peer 카드 및 상세 비교
Chat AI 금융 챗봇
Feedback 챗봇 응답 피드백

🚀 Deployment

develop Merge
      ↓
GitHub Actions
      ↓
Docker Build
      ↓
AWS EC2
      ↓
Docker Compose
      ↓
Spring Boot Server

develop 브랜치에 변경사항이 반영되면 GitHub Actions를 통해 Docker Build를 검증하고, AWS EC2 환경에 자동 배포합니다.


🌿 Branch Convention

브랜치 이름은 아래 규칙을 따릅니다.

type/이슈번호-작업내용
Type 의미 예시
feat 새로운 기능 개발 feat/1-signup
fix 버그 수정 fix/2-login-error
docs 문서 수정 docs/3-readme
refactor 코드 리팩토링 refactor/4-member-service
chore 설정, 빌드, 기타 작업 chore/5-github-template
test 테스트 코드 작성 test/6-member-service

💬 Commit Convention

커밋 메시지는 아래 형식을 사용합니다.

type: 작업 내용
Type 의미
feat 새로운 기능 추가
fix 버그 수정
docs 문서 수정
style 코드 포맷팅 등 기능 변화 없는 수정
refactor 코드 리팩토링
test 테스트 코드 추가 또는 수정
chore 빌드 설정, 패키지 설정, 기타 작업
rename 파일 또는 폴더명 변경
remove 파일 삭제

About

팀 이천원만 🤍Peerfoilo🤍 BE

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages