Skip to content
@5kstration

5kstration

MoneyLog

청년 맞춤형 금융 생활관리 플랫폼

[우리FISA 6기] 클라우드 엔지니어링 과정 5팀

GitHub Tech Stack Architecture


📑 목차

  1. 팀원 소개
  2. 프로젝트 개요
  3. 기술 스택
  4. 아키텍처
  5. 핵심 기능

팀원 소개

주용완
주용완
PM, DevOps, SRE, CDC
스크린샷 2026-06-16 오후 7 24 35
서지혜
PL, Cloud Infra, AI
스크린샷 2026-06-16 오후 7 25 55
유동균
Logging, Monitoring
스크린샷 2026-06-16 오후 7 28 07
이준호
Onpremise Infra
스크린샷 2026-06-16 오후 7 28 54
이명진
Data Management, Infra

프로젝트 개요

프로젝트 주제

MoneyLog : 청년 맞춤형 금융 생활관리 플랫폼

AI 기반 소비 분석과 소셜 피드를 결합하여, 청년들이 자신의 금융 생활을 즐겁게 관리하고 공유할 수 있는 참여형 금융 플랫폼입니다.

기획 배경 및 목적

기획 배경 자세히 보기

최근 청년 세대에게 소비는 단순한 지출 행위를 넘어, 자신의 가치관과 개성을 드러내는 중요한 자기표현의 수단이 되었습니다. 'Todo Mate'나 'Setlog'와 같은 서비스의 흥행에서 알 수 있듯, 자신의 일상과 목표를 기록하고 공유하며 또래와 동기부여를 주고받는 문화는 이미 청년 세대의 주요 트렌드로 자리 잡고 있습니다.

그러나 기존의 금융 및 자산관리 애플리케이션은 대부분 계좌, 카드, 보험, 소비 내역과 같은 금융 데이터를 숫자와 통계 중심으로 제공하는 데 집중되어 있습니다.

MoneyLog는 이러한 한계를 해결하기 위해:

  • ✅ AI를 활용한 사용자 소비 데이터 분석
  • ✅ 가계부 작성과 관리 자동화 지원
  • ✅ 월별 소비 리포트 및 청년정책 추천
  • ✅ 소셜 피드 기반 소비 공유 및 피드백

핵심 목적

금융 데이터의 '연결'과 '스토리화'를 통해 청년들이 자신만의 소비 방식을 자연스럽게 돌아볼 수 있는 소셜 금융 생태계 구축

세부 목적 및 기대 효과

구분 내용
금융의 소셜화 단순 지출 기록을 '금융 피드'로 전환, 또래 피드백을 통한 리텐션 극대화
정보 비대칭 해소 파편화된 청년정책/금융상품 정보를 맞춤형으로 제공
사용자 측면 시각적 피드로 심리적 거부감 낮추고 지속적인 기록 습관 형성
플랫폼 측면 소셜 피드 기반 높은 리텐션과 생활 밀착형 플랫폼 확장
사회적 측면 청년 혜택 정보 접근성 향상, 금융 이해도 문화 확산

개발 목표

목표 설명
Infrastructure Amazon EKS 기반 컨테이너 환경, Auto-scaling, 서버 이중화
Application Java/TypeScript 기반 MSA, 인증·인가, 소셜 피드 기능
DevOps Jenkins/GitLab CI/CD 파이프라인, 실시간 모니터링
Testing DB 무결성 검증, JUnit 단위/통합 테스트, 문서화
AI/ML 소비 패턴 분석, 개인화 추천, 청년정책/카드/보험 추천

기술 스택

Backend

Frontend

Infrastructure & DevOps

AI/ML & Messaging

전체 기술 스택 상세 보기

Backend

  • Language: Java 17, Python 3.x
  • Framework: Spring Boot 3.5.14, FastAPI 0.115.0, Node.js + TypeScript
  • Database: PostgreSQL, Redis
  • Message Queue: NATS JetStream
  • CDC: Debezium
  • AI/ML: LangGraph, LangChain, Anthropic Claude, Neo4j, Sentence Transformers

Frontend

  • Framework: Next.js 16.2.6, React 19
  • Language: TypeScript 5.7.3
  • UI Library: Radix UI, Tailwind CSS 4.2.0
  • State Management: Apollo Client (GraphQL)
  • Data Visualization: Recharts

Infrastructure & DevOps

  • Container: Docker, Kubernetes (Amazon EKS)
  • Orchestration: Terraform, Helm
  • Service Mesh: Istio
  • CI/CD: Jenkins, GitLab CI/CD
  • Monitoring: Prometheus, Grafana, Loki, Tempo, Alloy, Grafana Faro
  • Observability: OpenTelemetry, SonarQube

아키텍처

시스템 아키텍처

시스템아키텍처

아키텍처 설명

하이브리드 클라우드 구조로 AWS와 온프레미스 환경을 Site-to-Site VPN으로 연결했습니다.

환경 구성 요소 설명
AWS 클라우드 EKS, Multi-AZ, ALB, WAF 고가용성 확보, Istio 인그레스 게이트웨이 라우팅
온프레미스 vSphere(ESXi), K8s HAProxy + Keepalived 이중화, NATS JetStream

소프트웨어 아키텍처

소프트웨어아키텍처

아키텍처 설명

마이크로서비스 아키텍처(MSA) 기반으로 도메인별 서비스를 분리했습니다.

계층 설명
게이트웨이 S3/CloudFront → ALB → Istio Gateway → BFF → Spring Cloud Gateway
마이크로서비스 Social, Alarm, Budget, Auth, AI 서비스 (Controller-Service-Component-DBIO)
데이터 동기화 독립 DB 사용, CDC(Change Data Capture)로 비동기 전파

핵심 기능

핵심 기술 구성

AI & Data

  1. Graph RAG + Reranker 기반 AI

    • 지식 그래프 형태 금융 데이터 관계 구성
    • 개인화된 소비 인사이트 제공
  2. Hot/Cold 데이터 아키텍처

    • 자동화된 티어링으로 비용 최적화
    • 성능과 비용 동시 개선

Infrastructure & DevOps

  1. 실시간 이벤트 처리 (CDC)

    • CQRS 패턴으로 읽기/쓰기 분리
    • 데이터 일관성 유지
  2. Istio 서비스 메시

    • 카나리 배포로 무중단 배포
    • mTLS 암호화 통신
  3. AIOps 기반 인프라 운영

    • SLO 기반 Error Budget 관리
    • AI 자동 근본 원인 분석

통합 워크플로우

전체 워크플로우

세부 기능


1. AI 기반 소비 분석 및 맞춤형 추천

기능 개요

LangGraph 기반 AI 파이프라인을 통해 사용자의 소비 패턴을 분석하고, 개인 맞춤형 금융상품과 청년정책을 자동 추천합니다.

핵심 기술

  • LangGraph 9단계 DAG 파이프라인
  • Hybrid Search (pgvector + Neo4j + Reranker)
  • AWS Bedrock (Claude Haiku + Titan Embed)
  • Neo4j Graph DB 관계 표현

성능 개선

  • Graph DB 기반 탐색: 50.8
  • Reranker: 60.2
  • Prompt 개선(CoT, Few Shot): 55.1점 → 72.6점

추천 파이프라인 흐름

graph LR
    A[Profile<br/>사용자 데이터] --> B[Embed<br/>가중 평균 임베딩]
    B --> C[VectorSearch<br/>상위 30개]
    C --> D[Rerank<br/>7개 압축]
    D --> E[Filter<br/>조건 필터링]
    E --> F[GraphExpand<br/>관계 조회]
    F --> G[Conflict<br/>중복 감지]
    G --> H[LLM<br/>추천 생성]
    H --> I[Save<br/>DB 저장]
Loading
핵심 코드 보기
# app/domain/recommend_ai/graph.py - LangGraph 파이프라인 구성
from langgraph.graph import StateGraph, START, END

def build_recommend_graph():
    graph = StateGraph(RecommendState)
    
    # 노드 등록
    graph.add_node("profile", profile_node)
    graph.add_node("embed", embed_node)
    graph.add_node("vector_search", vector_search_node)
    graph.add_node("rerank", rerank_node)
    graph.add_node("filter", filter_node)
    graph.add_node("graph_expand", graph_expand_node)
    graph.add_node("conflict", conflict_node)
    graph.add_node("llm", llm_recommend_node)
    graph.add_node("save", save_node)
    
    # 에지 연결
    graph.add_edge(START, "profile")
    graph.add_conditional_edges("profile", _has_error, {
        "save": "save", 
        "continue": "embed"
    })
    # ... (생략) ...
    
    return graph.compile()

코드 링크: LangGraph Pipeline | Embedding Node


2. 실시간 이벤트 처리 및 CDC 기반 데이터 동기화

기능 개요

Debezium CDC와 NATS JetStream을 활용한 이벤트 기반 아키텍처로 데이터 일관성을 보장하면서 실시간 처리를 구현했습니다.

핵심 아키텍처

  • Debezium: PostgreSQL WAL 실시간 캡처
  • NATS JetStream: Pub/Sub 메시징
  • Leaf Node: AWS EKS ↔ 온프레미스 연결
  • CQRS: 읽기/쓰기 책임 분리

고가용성 보장

  • Durable Consumer (재시작 시 이어서 처리)
  • Queue Group (중복 방지)
  • Manual ACK (At-Least-Once 보장)
  • Offset 저장 (재시작 복구)

데이터 흐름

PostgreSQL → Debezium → NATS JetStream → AI/Alarm Service
   (WAL)      (CDC)      (Pub/Sub)        (Consumer)
핵심 코드 보기
# debezium/aws_debezium/debezium-budget.yaml - CDC 설정
apiVersion: v1
kind: ConfigMap
metadata:
  name: debezium-budget-config
data:
  application.properties: |
    debezium.sink.type=nats-jetstream
    debezium.sink.nats-jetstream.url=nats://k8s_leaf:leaf_password@10.0.2.65:4222
    
    debezium.source.connector.class=io.debezium.connector.postgresql.PostgresConnector
    debezium.source.database.hostname=oka-budget.ctku6oc2yg75.ap-northeast-2.rds.amazonaws.com
    debezium.source.topic.prefix=budget-server
    debezium.source.plugin.name=pgoutput

코드 링크: Debezium Config | NATS Consumer


3. Istio 기반 서비스 메시(Service Mesh) 및 트래픽 제어

기능 개요

Istio 서비스 메시와 Argo Rollouts를 결합하여 카나리 배포로 무중단 배포를 실현했습니다.

핵심 기능

  • Envoy Sidecar 자동 주입
  • 경로 기반 라우팅 (VirtualService)
  • mTLS 암호화 통신
  • Argo Rollouts 카나리 배포

배포 프로세스

  1. Canary Replica 생성 (0%)
  2. 트래픽 점진 전환 (10%→30%→50%→100%)
  3. LLM Judge 검증 (72점 이상)
  4. 자동 롤백 (실패 시)
핵심 코드 보기
# infra/manifest/gateway-service/istio.yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: gateway-service-moneylog-vs
spec:
  hosts: ["*"]
  gateways: [moneylog-gateway]
  http:
    - match:
        - uri:
            prefix: "/graphql"
      route:
        - destination:
            host: bff-service
            port:
              number: 8085

코드 링크: Istio Gateway | Jenkinsfile Canary


4. Hot/Cold 데이터 아키텍처를 통한 데이터 라이프사이클 최적화

기능 개요

Hot Storage(S3)와 Cold Storage(MinIO)를 자동 티어링하여 성능과 비용을 동시에 최적화했습니다.

저장소 구성

  • Hot Storage (S3): 최근 30일 데이터
  • Cold Storage (MinIO): 30일 이상 데이터
  • Hybrid Cloud: Site-to-Site VPN 연결

비용 절감

  • S3: $0.025/GB/월
  • MinIO: ~$0.007/GB/월
  • 월간 저장 비용 60% 절감

데이터 라이프사이클

graph LR
    A[HOT<br/>S3 업로드] --> B[ARCHIVING<br/>MinIO 복사]
    B --> C[BOTH<br/>체크섬 검증]
    C --> D[DELETING_HOT<br/>7일 대기]
    D --> E[COLD<br/>S3 삭제 완료]
Loading

자동화 스케줄러

  • 📅 매일 03:00 KST: 아카이브 작업 (50개/배치)
  • 📅 매일 03:30 KST: Hot 삭제 작업
핵심 코드 보기
// FeedImageArchiveScheduler.java - 자동화 스케줄러
@Scheduled(cron = "0 0 3 * * *", zone = "Asia/Seoul")
public void archiveEligibleImages() {
    feedImageArchiveBatchService.archiveEligibleImages();
}

@Scheduled(cron = "0 30 3 * * *", zone = "Asia/Seoul")
public void deleteEligibleHotObjects() {
    feedImageHotDeletionService.deleteEligibleHotObjects();
}

코드 링크: Archive Scheduler | MinIO StatefulSet


5. AIOps 및 SRE 기반의 고가용성 인프라 운영

기능 개요

Prometheus + Sloth로 SLO를 관리하고, AWS Lambda + Claude AI로 장애를 자동 분석하여 Slack으로 알림합니다.

SLI/SLO 정의

  • Gateway: 99.0% 가용성, 500ms 레이턴시
  • Core APIs: 99.0% 가용성
  • AI Service: 95.0% 가용성, 30s 레이턴시
  • CDC: 99.0% 시간 동안 3초 이내
  • NATS: 99.0% 시간 동안 10k 미만

AIOps 효과

  • 평균 분석 시간(MTTR): 15초 이내
  • Slack 알림: 장애 후 30초 이내

AIOps 자동화 워크플로우

graph LR
    A[Prometheus<br/>SLO 감지] --> B[Alertmanager<br/>필터링]
    B --> C[SNS<br/>발행]
    C --> D[Lambda<br/>트리거]
    D --> E[Loki<br/>로그 수집]
    E --> F[Claude AI<br/>분석]
    F --> G[Slack<br/>알림]
Loading
핵심 코드 보기
# aiops-lambda/lambda_function.py - AI 자동 분석
def lambda_handler(event, context):
    for record in event['Records']:
        alert_data = json.loads(record['Sns']['Message'])
        
        for alert in alert_data.get('alerts', []):
            if alert['status'] == 'firing':
                service_name = alert['labels'].get('service')
                
                # 1. Loki에서 로그 수집
                logs = get_loki_logs(service_name)
                
                # 2. Bedrock으로 AI 분석
                analysis = analyze_with_bedrock(alert_desc, logs)
                
                # 3. Slack으로 리포트 전송
                send_to_slack(alert_title, analysis)

코드 링크: AIOps Lambda | SLO Definitions


Contact & Links

GitHub Organization

Made with ❤️ by Team 5kstration


Popular repositories Loading

  1. payment-api-event-server payment-api-event-server Public

    카드 소비 내역 데이터 생성을 위한 api 서버

    Java

  2. api-connector api-connector Public

    Spring Boot 기반 외부 데이터 수집 마이크로서비스입니다.

    Java

  3. alarm-service-be alarm-service-be Public

    Spring Boot 기반 알림 마이크로서비스입니다. 현재 PostgreSQL, Redis, NATS JetStream을 사용하여 실시간 소셜 피드백 및 시스템 알림 배달, 알림 설정 관리를 처리합니다.

    Java

  4. ai-service-be ai-service-be Public

    청년 맞춤형 금융 생활 관리 플랫폼의 AI·추천 특화 마이크로서비스 수집된 사용자 소비 데이터를 분석하여 월별 리포트, 또래 비교, 맞춤형 금융 상품 및 청년 정책 추천을 제공합니다.

    Python

  5. auth-service-be auth-service-be Public

    Spring Boot 기반 인증/사용자 프로필 마이크로서비스입니다. PostgreSQL, Redis, JWT, OAuth(Kakao/Google)를 사용하여 OAuth 로그인, 토큰 발급/재발급/로그아웃, 온보딩, 내 정보 관리, 카드 온보딩, 프로필 이미지 업로드 URL 발급을 처리합니다.

    Java

  6. budget-service-be budget-service-be Public

    사용자의 거래 내역, 일별 원장, 피드, 예산 목표를 관리하는 Spring Boot 기반 백엔드 서비스입니다. 주요 책임은 다음과 같습니다. - 거래 내역 생성, 조회, 수정, 삭제 - 일별 원장과 소셜 피드 생성 및 공개 범위 관리 - 비공개 S3 피드 이미지의 Presigned PUT/GET URL 발급 - 월별 지출 캘린더와 예산 목표 달성률 제…

    Java

Repositories

Showing 10 of 13 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…