Finance Bot Project Guide

VerifiedSafe

Comprehensive guide for building a personal finance news curation bot using Next.js, Spring Boot, Node.js, and AI services.

Sby Skills Guide Bot
DevelopmentAdvanced
7/25/2026
#finance#news-scraping#automation#investment-research#bot

Recommended for

Automated summary

Comprehensive guide for building a personal financial news curation and investment research bot, covering multi-service architecture, coding patterns, and security practices.

Strengths

  • Detailed architecture with clear service separation (frontend, API, AI, data)
  • Precise coding guidelines for each layer (Spring Boot, Node.js, Next.js)
  • Production-ready error handling and security patterns
  • Includes testing and deployment strategy

Limitations

  • Tailored to the finance domain, requiring adaptation for other sectors
  • Heavy setup for simple curation needs
  • Relies on external services (Perplexity, Claude API, KakaoTalk) with potential costs
When to use it

When you want to build a personal automated financial news monitoring tool with AI classification and KakaoTalk notifications.

When not to use it

If you need a simple RSS reader or don't want to manage a complex multi-service architecture.

Security analysis

Safe
Quality score92/100

This is a documentation file describing a project architecture and development guidelines. It contains no executable commands, destructive actions, or data exfiltration instructions. It's purely informational and poses no security risk.

No concerns found

How this analysis is made

Examples

Architecture overview
I want to build a personal financial news curation bot with AI summarization and KakaoTalk notifications. Please provide the high-level architecture and component breakdown as described in the Finance Bot guide.
Service setup
Set up the project structure for a multi-service finance bot with Spring Boot API, Node.js AI service, and Next.js frontend. Include the directory structure and key configuration files.
Claude news classification
Implement a news classification service using Claude API that takes a URL, scrapes the content, classifies it, and returns a summary. Follow the coding patterns from the Finance Bot skill.

Finance Bot - 프로젝트 컨텍스트 & 개발 가이드

프로젝트 개요

  • 이름: 금융 뉴스 스크랩 및 투자 리서치 자동화 봇
  • 목적: 개인용 금융 뉴스 큐레이션 + 아카이빙 도구
  • 핵심 기능: 자동 수집(Perplexity) + 수동 URL 등록(Claude 분류) + 카카오톡 알림

기술 스택 전체 맵

Frontend:    Next.js 15 (App Router), TypeScript, Tailwind CSS + shadcn/ui, Zustand
api-server:  Spring Boot 3.x (Java 17), JPA, Supabase(PostgreSQL 15), Redis
ai-service:  Node.js (Express), claude.service.js, perplexity.service.js, kakao.service.js
data-service: FastAPI (Python), pandas (Level 2 이후)
자동화:      n8n (매일 07:00 KST 스케줄러)
배포:        Vercel(FE), Railway(api-server + ai-service), n8n Cloud

서비스별 역할

| 서비스 | 기술 | 역할 | |--------|------|------| | api-server | Spring Boot 3.x | 핵심 CRUD API (종목, 뉴스 아카이브, 발송 이력) | | ai-service | Node.js (Express) | AI 오케스트레이터 (Perplexity, Claude, 카카오톡 연동) | | data-service | FastAPI (Python) | 데이터 분석 (Level 2 이후 확장 대비) |


도메인 구조 (Spring Boot api-server)

com.financebot.apiserver/
├── domain/
│   ├── stock/        # 관심 종목 관리 (StockController, StockService, StockRepository)
│   ├── news/         # 뉴스 아카이브 (NewsArticle, NewsSummary)
│   └── notification/ # 발송 이력 (NotificationLog)
├── infra/
│   └── client/       # ai-service WebClient
└── global/
    ├── exception/     # GlobalExceptionHandler, CustomException
    └── response/      # ApiResponse<T> 공통 응답

Node.js ai-service 구조

src/
├── services/
│   ├── claude.service.js      # Claude API (뉴스 분류/요약) - Haiku 모델
│   ├── perplexity.service.js  # Perplexity API (자동 수집)
│   └── kakao.service.js       # 카카오톡 REST API
├── routes/                    # Express 라우터
├── controllers/
└── middleware/
    └── internalAuth.js        # X-Internal-Secret 헤더 인증

코딩 가이드라인

  • 주석: 한국어 필수 (복잡한 비즈니스 로직)
  • 들여쓰기: 2 spaces
  • 변수/함수: camelCase
  • 클래스/컴포넌트: PascalCase
  • 상수: UPPER_SNAKE_CASE
  • TypeScript: any 사용 금지, Strict Mode
  • 에러 처리: try-catch에서 적절한 에러 응답 반환 (단순 로그만 금지)
  • DTO 패턴: 모든 API 요청/응답에 DTO 필수 사용

서비스별 코딩 패턴

Spring Boot api-server

// 생성자 주입 방식 필수 (필드 주입 금지)
@Service
@RequiredArgsConstructor
public class StockService {
    private final StockRepository stockRepository;

    // 서비스 레이어에서 @Transactional 관리
    @Transactional
    public StockResponse create(StockCreateRequest request) { ... }

    // 소프트 삭제 패턴 (is_active = false)
    @Transactional
    public void deactivate(Long id) { ... }
}

// ApiResponse<T> 공통 응답 형식
@RestController
public class StockController {
    @PostMapping
    public ResponseEntity<ApiResponse<StockResponse>> create(...) {
        return ResponseEntity.status(201).body(ApiResponse.success(response));
    }
}

Node.js ai-service

// 서비스 레이어에서 비즈니스 로직 집중
// 에러는 적절한 HTTP 상태코드와 함께 반환
const classifyNews = async (url) => {
    try {
        // axios + cheerio로 크롤링
        // Claude API 호출 → JSON 파싱
        // Redis 중복 체크
    } catch (error) {
        // 단순 console.error만 하지 말고 에러 전파
        throw new AppError('분류 실패', 500, error.message);
    }
};

Next.js Frontend

// Server Component 우선 (데이터 패칭은 서버에서)
// Client Component는 interactivity 필요 시만 ('use client')
// Zustand 스토어: 클라이언트 상태만 관리
// React Hook Form + Zod: 폼 검증

// API 호출은 별도 lib/api.ts에 집중
export const fetchStocks = async (): Promise<Stock[]> => {
    const res = await fetch(`${API_BASE_URL}/api/v1/stocks`);
    if (!res.ok) throw new Error('종목 조회 실패');
    return res.json();
};

테스트 전략

| 서비스 | 테스트 도구 | 우선순위 | |--------|------------|---------| | api-server | JUnit 5 + MockMvc | Service 레이어 단위 테스트 | | ai-service | Jest | Service 함수 단위 테스트, API 응답 모킹 | | frontend | N/A (MVP 단계) | - |


에러 처리 패턴

api-server:  GlobalExceptionHandler → ApiResponse<T> 형태로 통일
ai-service:  AppError 클래스 → Express error middleware → JSON 에러 응답
frontend:    try-catch + 사용자 친화적 에러 메시지 (toast/alert)

보안 패턴

  • 서비스 간 통신: X-Internal-Secret 헤더 필수 (ai-service → api-server)
  • 환경변수: .env 파일 절대 커밋 금지, .env.example만 커밋
  • API 키: 모두 환경변수로 관리 (CLAUDE_API_KEY, PERPLEXITY_API_KEY 등)

작업 완료 프로토콜 (MANDATORY)

모든 작업이 완료된 후 반드시 아래 순서를 따릅니다.

1단계: 문서 업데이트

다음 파일들을 작업 내용에 맞게 업데이트 (버전 관리 필수):

| 파일 | 업데이트 조건 | |------|------------| | docs/PRD/PRD.md | 기능 추가/변경 시 버전 증가 | | docs/db/ERD.md | DB 스키마 변경 시 | | docs/api/backend/api-spec.md | api-server API 변경 시 | | docs/api/ai/api-spec.md | ai-service API 변경 시 | | docs/api/frontend/api-spec.md | 프론트엔드 API 호출 변경 시 | | docs/features/ai/auto-collection.md | AI 수집 기능 변경 시 | | docs/features/ai/notification.md | 알림 기능 변경 시 | | docs/features/user/news-archive.md | 뉴스 아카이브 기능 변경 시 | | docs/features/user/news-registration.md | 수동 등록 기능 변경 시 | | docs/features/user/stock-management.md | 종목 관리 기능 변경 시 |

2단계: README 업데이트

  • README.md (루트): 개발 진행 현황 체크리스트 업데이트
  • 변경된 서비스 폴더의 README.md 업데이트

3단계: Velog 초안 업데이트

docs/velog/*.md 중 해당 브랜치와 연계된 포스팅 초안에 내용 추가

  • .claude/velog.md의 "브랜치 → Velog 연계 맵" 참조

4단계: Git 작업

# 변경사항 커밋
git add <변경된 파일들>
git commit -m "feat: 작업 내용 요약"

# 브랜치 push 및 PR 생성
git push -u origin <브랜치명>
gh pr create --base develop --title "[서비스] 작업 내용" --body "..."

컨텍스트 관리 전략 (Auto-Compact)

언제 compact가 필요한가

  • 대화가 길어져 컨텍스트 윈도우가 가득 찰 때 자동으로 compact 실행
  • 작업 중단 없이 연속적으로 진행 가능

Memory 파일 관리 원칙

  • 중요 결정사항은 즉시 memory/MEMORY.md에 기록
  • 세션 종료 전 아래를 확인:
    • 완료된 작업 → MEMORY.md의 진행 상태 업데이트
    • 새로운 파일 위치 → 핵심 파일 위치 섹션에 추가
    • 새로운 설계 결정 → 주요 설계 결정 섹션에 추가
  • 상세 기술 노트가 필요한 경우 memory/ 하위에 별도 파일 생성 후 MEMORY.md에 링크

효율적 컨텍스트 사용

  • 작업 시작 시 반드시 MEMORY.md 확인하여 이전 작업 이어받기
  • 대규모 파일 읽기 시 필요한 섹션만 선택적으로 읽기 (offset/limit 활용)
  • 반복적인 전체 파일 읽기 대신 특정 패턴 검색(Grep) 활용

실행 명령어

# 로컬 인프라
docker-compose up -d  # PostgreSQL(로컬) + Redis

# api-server
cd api-server && ./gradlew bootRun --args='--spring.profiles.active=local'

# ai-service
cd ai-service && npm run start:dev

# frontend
cd frontend && npm run dev

# 테스트
cd api-server && ./gradlew test
cd ai-service && npm test

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/finance-bot-project-guide-mrx3xzhp/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/finance-bot-project-guide-mrx3xzhp' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/finance-bot-project-guide-mrx3xzhp/download' --output '.skill-downloads/finance-bot-project-guide-mrx3xzhp/SKILL.md.part' && mv '.skill-downloads/finance-bot-project-guide-mrx3xzhp/SKILL.md.part' '.skill-downloads/finance-bot-project-guide-mrx3xzhp/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

This file does not provide a usable name/description header for this native procedure. It remains available to download and inspect; use the manual method below.

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/finance-bot-project-guide-mrx3xzhp/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills