# I'm AI 투자매니저 시스템 아키텍처 설계서 ## 1. 개요 ### 1.1 문서 목적 I'm AI 투자매니저 시스템의 전체 아키텍처를 정의하여 개발 가이드라인 및 기술적 의사결정 근거 제공 ### 1.2 시스템 개요 - **서비스명**: I'm AI 투자매니저 - **아키텍처 패턴**: 하이브리드 클라우드 아키텍처 (로컬 + AWS) - **배포 전략**: 서버리스 + 로컬 데이터 처리 - **확장성**: 마이크로서비스 기반 확장 가능 ## 2. 전체 시스템 아키텍처 ### 2.1 시스템 구성도 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 사용자 (웹브라우저) │ └─────────────────────┬───────────────────────────────────────────┘ │ HTTPS ┌─────────────────────▼───────────────────────────────────────────┐ │ AWS CloudFront (CDN) │ └─────────────────────┬───────────────────────────────────────────┘ │ ┌─────────────────────▼───────────────────────────────────────────┐ │ React Frontend App │ │ (S3 Static Hosting) │ └─────────────────────┬───────────────────────────────────────────┘ │ API Calls ┌─────────────────────▼───────────────────────────────────────────┐ │ AWS API Gateway │ └─────────────────────┬───────────────────────────────────────────┘ │ ┌─────────────────────▼───────────────────────────────────────────┐ │ AWS Lambda Functions │ │ ┌─────────────────┬─────────────────┬─────────────────────────┐ │ │ │ Main API │ Product API │ WebSocket API │ │ │ │ Lambda │ Lambda │ Lambda │ │ │ └─────────────────┴─────────────────┴─────────────────────────┘ │ └─────────────────────┬───────────────────────────────────────────┘ │ Data Fetch ┌─────────────────────▼───────────────────────────────────────────┐ │ AWS S3 Bucket │ │ (AI 분석 결과 JSON 파일) │ └─────────────────────▲───────────────────────────────────────────┘ │ Data Upload ┌─────────────────────┴───────────────────────────────────────────┐ │ 로컬 데이터 처리 서버 │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ Apache Airflow │ │ │ │ ┌───────────────┬───────────────┬──────────────────────────┐ │ │ │ │ │ 데이터 수집 │ AI 분석 │ S3 업로드 │ │ │ │ │ │ DAGs │ DAGs │ DAGs │ │ │ │ │ └───────────────┴───────────────┴──────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ 로컬 데이터베이스 │ │ │ │ (PostgreSQL / MySQL / SQLite) │ │ │ └─────────────────────────────────────────────────────────────┘ │ └─────────────────────┬───┬───────────────────────────────────────┘ │ │ ┌───────────▼───▼──────────────┐ │ 외부 API 서비스 │ │ ┌─────────────┬─────────────┐│ │ │ 업비트 API │ 야후파이낸스 ││ │ │ (코인 데이터)│ (주식 데이터) ││ │ └─────────────┴─────────────┘│ │ ┌─────────────┬─────────────┐│ │ │ 뉴스 API │ AI API ││ │ │ (뉴스 데이터)│(Gemini/GPT) ││ │ └─────────────┴─────────────┘│ └─────────────────────────────────┘ ``` ## 3. 계층별 아키텍처 설계 ### 3.1 프레젠테이션 계층 (Frontend) #### 3.1.1 기술 스택 - **Framework**: React 18 + TypeScript - **State Management**: Zustand (가벼운 상태관리) - **Styling**: Tailwind CSS + shadcn/ui - **Chart Library**: Chart.js + TradingView Widgets - **Build Tool**: Vite - **WebSocket**: Socket.IO Client #### 3.1.2 컴포넌트 구조 ``` src/ ├── components/ │ ├── common/ # 공통 컴포넌트 │ ├── dashboard/ # 대시보드 관련 │ ├── product/ # 투자상품 상세 │ ├── simulation/ # 수익률 시뮬레이션 │ └── charts/ # 차트 컴포넌트 ├── hooks/ # 커스텀 훅 ├── stores/ # Zustand 상태관리 ├── services/ # API 서비스 ├── utils/ # 유틸리티 └── types/ # TypeScript 타입 ``` #### 3.1.3 주요 기능 - **실시간 가격 표시**: WebSocket 연결 - **반응형 디자인**: 모바일/데스크톱 대응 - **캐싱 전략**: React Query로 데이터 캐싱 - **성능 최적화**: Code Splitting, Lazy Loading ### 3.2 API 계층 (AWS Lambda) #### 3.2.1 Lambda 함수 구성 ``` lambda-functions/ ├── main-api/ # 메인 페이지 API │ ├── handler.py │ └── requirements.txt ├── product-api/ # 투자상품 상세 API │ ├── handler.py │ └── requirements.txt └── websocket-api/ # 실시간 데이터 API ├── handler.py └── requirements.txt ``` #### 3.2.2 API 설계 - **GET /api/web/main** - 메인페이지 데이터 (전체 투자상품 리스트) - 응답: JSON (투자상품 기본정보 + AI분석 요약) - **GET /api/web/invest/{product}** - 투자상품 상세 데이터 - 응답: JSON (상세 AI분석 + 캔들데이터 + 뉴스) - **WebSocket /ws/realtime** - 실시간 가격 업데이트 - 메시지: JSON (상품ID + 현재가 + 등락률) ### 3.3 데이터 계층 (로컬 서버) #### 3.3.1 Apache Airflow 구성 ``` airflow/ ├── dags/ │ ├── collect_crypto_data.py # 코인 데이터 수집 │ ├── collect_stock_data.py # 주식 데이터 수집 │ ├── collect_news_data.py # 뉴스 데이터 수집 │ ├── ai_analysis.py # AI 분석 수행 │ └── upload_to_s3.py # S3 업로드 ├── plugins/ │ ├── api_connectors/ # 외부 API 연결 │ └── ai_processors/ # AI 분석 엔진 └── config/ └── airflow.cfg ``` #### 3.3.2 데이터 파이프라인 1. **데이터 수집 (매 5분)**: 업비트/야후파이낸스 API 호출 2. **데이터 정규화**: 수집 데이터 표준화 및 검증 3. **AI 분석 (매 24시간)**: 수집된 데이터로 AI 분석 수행 4. **결과 업로드**: 분석 결과를 JSON 형태로 S3 업로드 ### 3.4 데이터베이스 설계 #### 3.4.1 데이터베이스 선택 - **DBMS**: PostgreSQL 15+ - **이유**: JSON 지원, 확장성, 안정성 #### 3.4.2 주요 테이블 구조 ```sql -- 투자상품 기본정보 CREATE TABLE symbols ( id SERIAL PRIMARY KEY, symbol VARCHAR(20) UNIQUE NOT NULL, name VARCHAR(100) NOT NULL, type VARCHAR(10) NOT NULL, -- 'CRYPTO' or 'STOCK' market VARCHAR(20) NOT NULL, is_active BOOLEAN DEFAULT true, created_at TIMESTAMP DEFAULT NOW() ); -- AI 분석결과 CREATE TABLE ai_analysis ( id SERIAL PRIMARY KEY, symbol_id INTEGER REFERENCES symbols(id), target_price DECIMAL(20,8), stop_loss_price DECIMAL(20,8), entry_price DECIMAL(20,8), attractiveness_score INTEGER, -- 1-100점 analysis_content TEXT, related_news JSON, analysis_date TIMESTAMP DEFAULT NOW() ); -- 캔들 데이터 CREATE TABLE invest_candle_data ( id SERIAL PRIMARY KEY, symbol_id INTEGER REFERENCES symbols(id), open_price DECIMAL(20,8), high_price DECIMAL(20,8), low_price DECIMAL(20,8), close_price DECIMAL(20,8), volume DECIMAL(20,8), candle_time TIMESTAMP, created_at TIMESTAMP DEFAULT NOW() ); -- 뉴스 정보 CREATE TABLE news_info ( id SERIAL PRIMARY KEY, symbol_id INTEGER REFERENCES symbols(id), title VARCHAR(500), content TEXT, source VARCHAR(100), published_at TIMESTAMP, url VARCHAR(1000), created_at TIMESTAMP DEFAULT NOW() ); ``` ## 4. 클라우드 아키텍처 (AWS) ### 4.1 AWS 서비스 구성 - **S3**: 정적 웹사이트 호스팅 + AI 분석 결과 저장 - **CloudFront**: CDN (전세계 캐시) - **API Gateway**: API 엔드포인트 관리 - **Lambda**: 서버리스 API 처리 - **IAM**: 권한 관리 ### 4.2 S3 버킷 구조 ``` ai-invest-bucket/ ├── web-assets/ # React 빌드 파일 │ ├── index.html │ ├── static/ │ └── assets/ └── data/ # AI 분석 결과 ├── main/ │ └── latest.json # 메인 페이지 데이터 └── products/ ├── BTC.json # 코인별 상세 데이터 ├── ETH.json ├── AAPL.json # 주식별 상세 데이터 └── ... ``` ### 4.3 보안 설정 - **HTTPS Only**: CloudFront SSL/TLS 인증서 - **CORS 설정**: API Gateway CORS 정책 - **API 키 관리**: AWS Systems Manager Parameter Store ## 5. 데이터 플로우 ### 5.1 실시간 데이터 플로우 ``` 외부 API → Airflow DAG → 로컬 DB → S3 업로드 → Lambda → Frontend ↓ ↑ WebSocket ──────────────────────────────────────────────┘ ``` ### 5.2 사용자 요청 플로우 ``` 사용자 → CloudFront → S3 (React App) → API Gateway → Lambda → S3 Data → 응답 ``` ### 5.3 AI 분석 플로우 ``` 캔들데이터 + 뉴스데이터 → AI 프롬프트 생성 → AI API 호출 → 결과 파싱 → DB 저장 → S3 업로드 ``` ## 6. 성능 최적화 전략 ### 6.1 Frontend 최적화 - **번들 최적화**: Code Splitting, Tree Shaking - **이미지 최적화**: WebP 포맷, Lazy Loading - **캐싱**: Service Worker, Browser Cache - **WebSocket**: 실시간 데이터만 필요시 연결 ### 6.2 Backend 최적화 - **Lambda Cold Start**: Provisioned Concurrency 설정 - **데이터베이스**: 인덱싱, Connection Pooling - **S3**: CloudFront 캐시, Gzip 압축 ### 6.3 비용 최적화 - **Lambda**: 메모리 최적화, 실행시간 단축 - **S3**: Intelligent Tiering, 불필요한 파일 정리 - **AI API**: 배치 처리, 캐시 활용 ## 7. 확장성 고려사항 ### 7.1 수평적 확장 - **투자상품 추가**: symbols 테이블에 데이터 추가만으로 확장 - **Lambda 스케일링**: Auto Scaling 지원 - **데이터베이스**: Read Replica 추가 가능 ### 7.2 수직적 확장 - **Airflow**: Worker 노드 추가 - **데이터베이스**: 인스턴스 사양 업그레이드 - **Lambda**: 메모리 증설 ## 8. 모니터링 및 로깅 ### 8.1 모니터링 구성 - **AWS CloudWatch**: Lambda 메트릭, 로그 수집 - **Airflow**: DAG 실행 상태 모니터링 - **Database**: 성능 메트릭 수집 ### 8.2 알람 설정 - **API 응답시간** > 500ms 알람 - **Lambda 에러율** > 1% 알람 - **데이터 수집 실패** 알람 ## 9. 개발 및 배포 전략 ### 9.1 개발 환경 ``` Local Development → Git Repository → GitHub Actions → AWS Deployment ``` ### 9.2 CI/CD 파이프라인 - **Frontend**: Vite Build → S3 Upload → CloudFront Invalidation - **Backend**: Lambda Package → AWS SAM Deploy - **Database**: Migration Scripts 자동 실행 ### 9.3 환경 분리 - **Development**: 로컬 환경 - **Staging**: AWS 환경 (소규모) - **Production**: AWS 환경 (본격 서비스) ## 10. 기술 선택 근거 ### 10.1 React vs Vue.js - **선택**: React 18 - **근거**: 더 큰 생태계, TypeScript 지원 우수, 개발자 풀 확보 용이 ### 10.2 Zustand vs Redux - **선택**: Zustand - **근거**: 더 간단한 API, 보일러플레이트 최소화, 번들 사이즈 작음 ### 10.3 PostgreSQL vs MySQL - **선택**: PostgreSQL - **근거**: JSON 지원 우수, 확장성, 오픈소스 안정성