8.2 KiB
8.2 KiB
Deployment Checklist
퇴직연금 리밸런싱 + Quant 플랫폼 배포 체크리스트
배포 전 준비 사항
1. 환경 설정
.env파일 생성 (.env.example참고)- 프로덕션용 데이터베이스 비밀번호 설정
- JWT 시크릿 키 생성 (필요한 경우)
- Redis 비밀번호 설정
- CORS 허용 도메인 설정
2. 데이터베이스
- PostgreSQL 15 설치 확인
- TimescaleDB 익스텐션 설치
- 데이터베이스 생성
- Alembic 마이그레이션 실행
- 인덱스 생성 확인
3. 데이터 수집
- MySQL에서 PostgreSQL로 데이터 마이그레이션 실행
- 티커 데이터 수집 실행
- 가격 데이터 수집 실행
- 재무제표 데이터 수집 실행
- 섹터 데이터 수집 실행
4. 테스트
- 단위 테스트 통과 (
pytest -m unit) - 통합 테스트 통과 (
pytest -m integration) - 백테스트 엔진 검증
- 전략 일관성 확인
- API 엔드포인트 테스트
- Frontend 빌드 성공
5. 성능 최적화
- 데이터베이스 쿼리 최적화
- 인덱스 튜닝
- Redis 캐싱 설정
- Nginx 설정 최적화
- 이미지 최적화 (Docker)
Docker 배포
1. 이미지 빌드
# 전체 이미지 빌드
docker-compose build
# 특정 서비스만 빌드
docker-compose build backend
docker-compose build frontend
2. 서비스 시작
# 전체 서비스 시작
docker-compose up -d
# 로그 확인
docker-compose logs -f
3. 서비스 확인
- PostgreSQL:
docker-compose ps postgres - Redis:
docker-compose ps redis - Backend:
http://localhost:8000/health - Frontend:
http://localhost:3000 - Celery Worker:
docker-compose ps celery_worker - Celery Beat:
docker-compose ps celery_beat - Flower:
http://localhost:5555 - Nginx:
http://localhost(포트 80)
4. 데이터베이스 마이그레이션
docker-compose exec backend alembic upgrade head
5. 초기 데이터 수집
# 전체 데이터 수집
curl -X POST http://localhost:8000/api/v1/data/collect/all
# 또는 개별 수집
curl -X POST http://localhost:8000/api/v1/data/collect/ticker
curl -X POST http://localhost:8000/api/v1/data/collect/price
curl -X POST http://localhost:8000/api/v1/data/collect/financial
curl -X POST http://localhost:8000/api/v1/data/collect/sector
검증
1. 자동 검증 스크립트
python scripts/verify_deployment.py
2. 수동 검증
API 엔드포인트 테스트
# Health check
curl http://localhost:8000/health
# 전략 목록
curl http://localhost:8000/api/v1/backtest/strategies/list
# 데이터베이스 통계
curl http://localhost:8000/api/v1/data/stats
# 포트폴리오 목록
curl http://localhost:8000/api/v1/portfolios/?skip=0&limit=10
백테스트 실행
curl -X POST http://localhost:8000/api/v1/backtest/run \
-H "Content-Type: application/json" \
-d @samples/backtest_config.json
포트폴리오 생성
curl -X POST http://localhost:8000/api/v1/portfolios/ \
-H "Content-Type: application/json" \
-d @samples/portfolio_create.json
3. Frontend 테스트
- 브라우저에서
http://localhost:3000접속 - 백테스트 탭 동작 확인
- 리밸런싱 탭 동작 확인
- 데이터 관리 탭 확인
- 차트 렌더링 확인
4. Celery 작업 확인
- Flower 대시보드 접속 (
http://localhost:5555) - 워커 상태 확인
- 태스크 히스토리 확인
- Beat 스케줄 확인 (평일 18시 자동 수집)
모니터링
1. 로그 확인
# 전체 로그
docker-compose logs -f
# 특정 서비스 로그
docker-compose logs -f backend
docker-compose logs -f celery_worker
docker-compose logs -f postgres
2. 리소스 사용량
# Docker 컨테이너 리소스 사용량
docker stats
# 디스크 사용량
docker system df
3. 데이터베이스 모니터링
# PostgreSQL 연결
docker-compose exec postgres psql -U postgres -d pension_quant
# 테이블 크기 확인
SELECT
schemaname,
tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
# 레코드 수 확인
SELECT
'assets' as table_name, COUNT(*) FROM assets
UNION ALL
SELECT 'price_data', COUNT(*) FROM price_data
UNION ALL
SELECT 'financial_statements', COUNT(*) FROM financial_statements
UNION ALL
SELECT 'portfolios', COUNT(*) FROM portfolios;
백업
1. 데이터베이스 백업
# 백업 생성
docker-compose exec postgres pg_dump -U postgres pension_quant > backup_$(date +%Y%m%d).sql
# 백업 복원
docker-compose exec -T postgres psql -U postgres pension_quant < backup_20240101.sql
2. 자동 백업 설정
cron에 백업 스크립트 등록:
# /etc/cron.daily/pension-quant-backup
#!/bin/bash
cd /path/to/pension-quant-platform
docker-compose exec postgres pg_dump -U postgres pension_quant | gzip > /backups/pension_quant_$(date +%Y%m%d).sql.gz
find /backups -name "pension_quant_*.sql.gz" -mtime +30 -delete
문제 해결
컨테이너가 시작되지 않을 때
# 상태 확인
docker-compose ps
# 로그 확인
docker-compose logs [service_name]
# 재시작
docker-compose restart [service_name]
데이터베이스 연결 실패
# PostgreSQL 상태 확인
docker-compose exec postgres pg_isready -U postgres
# 연결 테스트
docker-compose exec postgres psql -U postgres -c "SELECT 1"
Celery 워커 문제
# 워커 상태 확인
docker-compose exec celery_worker celery -A app.celery_app inspect ping
# 워커 재시작
docker-compose restart celery_worker celery_beat
디스크 공간 부족
# 사용하지 않는 Docker 리소스 정리
docker system prune -a
# 오래된 백업 삭제
find /backups -name "*.sql.gz" -mtime +90 -delete
보안 체크리스트
- 데이터베이스 비밀번호 변경 (기본값 사용 금지)
- Redis 비밀번호 설정
- 방화벽 설정 (필요한 포트만 개방)
- HTTPS 설정 (프로덕션 환경)
- CORS 허용 도메인 제한
- API Rate Limiting 설정
- 로그에 민감정보 노출 방지
성능 최적화
1. PostgreSQL 튜닝
-- shared_buffers 증가 (RAM의 25%)
ALTER SYSTEM SET shared_buffers = '4GB';
-- effective_cache_size 증가 (RAM의 50-75%)
ALTER SYSTEM SET effective_cache_size = '8GB';
-- work_mem 증가
ALTER SYSTEM SET work_mem = '64MB';
-- maintenance_work_mem 증가
ALTER SYSTEM SET maintenance_work_mem = '512MB';
-- 설정 재로드
SELECT pg_reload_conf();
2. 인덱스 생성
-- 자주 사용되는 쿼리에 인덱스 추가
CREATE INDEX idx_price_data_ticker_timestamp ON price_data (ticker, timestamp DESC);
CREATE INDEX idx_financial_ticker_date ON financial_statements (ticker, base_date DESC);
CREATE INDEX idx_assets_sector ON assets (sector) WHERE is_active = true;
3. TimescaleDB 압축
-- 압축 정책 활성화 (1년 이상 된 데이터)
ALTER TABLE price_data SET (
timescaledb.compress,
timescaledb.compress_segmentby = 'ticker'
);
SELECT add_compression_policy('price_data', INTERVAL '1 year');
업데이트 프로세스
1. 코드 업데이트
# Git pull
git pull origin main
# 이미지 재빌드
docker-compose build
# 서비스 재시작
docker-compose up -d
2. 데이터베이스 마이그레이션
# 마이그레이션 파일 생성 (필요한 경우)
docker-compose exec backend alembic revision --autogenerate -m "description"
# 마이그레이션 실행
docker-compose exec backend alembic upgrade head
3. 무중단 업데이트
# Blue-Green 배포 또는 Rolling 업데이트
# (Kubernetes, Docker Swarm 등 사용 시)
최종 확인
- 모든 서비스가 정상 동작
- 백테스트 실행 성공
- 데이터 수집 자동화 동작
- 리밸런싱 계산 정확성 확인
- Frontend 정상 렌더링
- Celery 작업 스케줄 확인
- 백업 설정 완료
- 모니터링 설정 완료
- 문서화 완료
배포 완료! 🚀