서비스인프라 확장성과 모니터링설계 - 100-hours-a-week/3-team-ssammu-wiki GitHub Wiki
AI 서비스 인프라 아키텍처 및 모니터링 설계 문서
1. 인프라 개요 및 아키텍처 다이어그램
AI 기반 이력서 분석 및 추천 서비스를 위한 인프라 아키텍처는 다음과 같이 구성됨:
1.1 인프라 구성 개요
- 클라우드 플랫폼: Google Cloud Platform (GCP)
- VPC 네트워크: VPC-SSMU-AI (CIDR: 10.0.0.0/16) 내 모든 컴포넌트 구성
- 이원화 구조: API 서버와 LLM 서버를 분리하여 각 역할 최적화 및 독립적 확장성 확보
- 컨테이너화: 주요 서비스(FastAPI, ChromaDB)는 Docker 컨테이너로 패키징하여 유연한 배포 및 확장 가능
- 정기 데이터 업데이트: Cloud Scheduler를 통해 기업 뉴스 및 공시 데이터를 주기적으로 수집 및 업데이트
- 모니터링 및 로깅 체계 구축: Cloud Logging과 Cloud Monitoring을 통한 실시간 상태 추적 및 경고 설정
1.2 인프라 상세 아키텍처
컴포넌트 | 설명 |
---|---|
VM1 (e2-medium) | FastAPI 서버, LangChain 기반 자연어 체인, SentenceTransformer 임베딩 모델, ChromaDB(벡터DB) 구동 |
VM2 (g2-standard-8) | vLLM 기반 Mistral-7B-instruct 모델 서빙 (GPU 인스턴스) |
Cloud Scheduler | 주기적으로 뉴스/공시 수집 및 요약 파이프라인 트리거 |
Cloud Storage | 수집된 데이터 및 백업 파일 저장소 |
Cloud Logging & Monitoring | API 서버 및 모델 서버 로그 수집 및 주요 성능 지표 대시보드화 |
1.3 아키텍처 다이어그램
- GCP Compute Engine e2-medium (VM1)
- Docker 컨테이너로 FastAPI, LangChain, ChromaDB 서비스를 각각 실행
- 사용자의 이력서 분석 요청, 데이터 검색 및 임베딩 처리 담당
- GCP Compute Engine g2-standard-8 (VM2)
- vLLM 서버를 통해 Mistral-7B LLM 모델 추론 제공
- FastAPI 서버에서 전달받은 요청을 빠르게 처리하고 결과 반환
- Cloud Scheduler
- 매주 자동으로 뉴스 및 공시 데이터를 수집하여 ChromaDB에 업데이트
- 파이프라인 스크립트를 주기적으로 실행
- Cloud Logging / Monitoring
- 모든 서버의 로그, 오류, 시스템 자원(CPU, RAM, GPU) 상태를 실시간 수집
- 알림 및 대시보드를 통해 서비스 상태를 지속적으로 모니터링
- VPC-SSMU-AI (10.0.0.0/16)
- 모든 VM 및 클라우드 리소스가 내부 VPC 네트워크로 연결되어 높은 보안성과 통신 속도 확보
1.4 주요 특징 정리
- 확장성: VM1과 VM2를 별도로 관리하여 필요 시 독립적으로 수평 확장 가능
- 안정성: 장애 발생 시 각 인스턴스 단위로 빠른 복구 가능
- 효율성: GPU 리소스는 모델 추론에 집중, CPU 인스턴스는 API 처리 및 DB 관리에 최적화
- 모듈화: 각 컴포넌트가 독립적이면서도 유기적으로 통신하여 유지보수 용이
- 모니터링: Cloud Monitoring을 통한 실시간 성능 지표 수집 및 자동화된 알림 시스템 구축
2. 주요 인프라 구성 및 기술 스택
AI 기반 이력서 분석 및 추천 서비스를 위해 구성된 인프라의 각 컴포넌트는 다음과 같음.
구성 요소 | 기술 스택 | 역할 및 설명 |
---|---|---|
API 서버 | FastAPI, LangChain, ChromaDB | 사용자 요청을 받아 LLM 서버 호출, Embedding 생성, ChromaDB 조회 등 주요 비즈니스 로직을 처리 |
LLM 추론 서버 | vLLM, Mistral-7B-Instruct-v0.3 | 대규모 언어 모델을 고속으로 추론하는 전용 서버 (GPU 사용), OpenAI API 호환 인터페이스 제공 |
벡터 저장소 | ChromaDB | 의미 기반 검색(semantic search)을 위해 생성된 임베딩 벡터를 저장하고 검색하는 역할 |
임베딩 생성 모델 | SentenceTransformer (snunlp/KR-SBERT-V40K-klueNLI-augSTS) | 뉴스 및 공시 데이터, 사용자 입력을 벡터로 변환하여 ChromaDB에 저장 |
정기 수집 파이프라인 | Cloud Scheduler, Cloud Functions (또는 Python 스케줄러) | 기업 뉴스/공시 데이터 수집 및 업데이트를 주기적으로 자동 실행 |
모니터링 및 로깅 | Google Cloud Logging, Google Cloud Monitoring (또는 Prometheus+Grafana) | 인프라 상태(서버 성능, GPU 사용률, 에러율 등) 및 어플리케이션 로그를 수집하고, 대시보드 및 알림 시스템 구성 |
각 구성 요소 설명
- FastAPI + LangChain + ChromaDB
- 사용자 요청을 받아 텍스트 분석, 벡터 임베딩 생성, 벡터 검색을 수행
- LangChain을 활용하여 LLM 호출, 프롬프트 템플릿, 체인 구성 자동화
- ChromaDB를 이용해 벡터 기반 의미 검색(semantic search) 구현
- vLLM 서버 (Mistral-7B-Instruct-v0.3)
- 대규모 언어 모델을 고속 서빙
- GPU를 최적 활용 (GPU Memory Utilization: 0.9 설정)
- FastAPI 서버가 내부적으로 HTTP 요청을 보내 모델 추론 결과를 받아옴
- 서버당 다수의 동시 요청(concurrent requests) 처리 가능
- ChromaDB
- News / IR 공시 등 다양한 문서의 임베딩을 저장
- 문맥 기반 질의-응답(semantic retrieval)을 지원
- 확장 시 클러스터 모드 또는 외부 벡터 DB로 이전 고려 가능 (예: Pinecone, Weaviate)
- Embedding Model
- 문서나 사용자 입력을 768차원 벡터로 변환
- 한국어 성능에 최적화된 KR-SBERT 모델 사용
- 향후 상황에 따라 더 고성능 모델로 교체 가능 (예: E5-large, KLUE BERT)
- 데이터 수집 자동화
- Cloud Scheduler를 통해 주기적 트리거 설정
- Cloud Functions 또는 VM 내 스케줄링 코드로 뉴스/공시 크롤링 및 DB 업데이트 자동화
- 로깅 및 모니터링
- FastAPI, vLLM 서버의 로그를 Cloud Logging에 자동 수집
- 주요 메트릭(응답속도, 에러율, GPU 사용률)을 Cloud Monitoring 대시보드로 시각화
- 이상치 발생 시 알림(Notification)을 Slack이나 이메일로 전송
3. 배포 및 확장 전략
AI 기반 이력서 분석 및 추천 서비스를 안정적이고 확장 가능하게 운영하기 위해, 다음과 같은 배포 및 확장 전략을 채택함.
3.1 현재 배포 구조
-
VM1 (API 서버):
FastAPI + LangChain + ChromaDB 기반으로 사용자 요청을 처리하고, 임베딩 및 검색을 수행함.
VM1은 CPU 중심의 부하를 받으며, 필요 시 수평 확장 가능하도록 설계함.
-
VM2 (LLM 추론 서버):
vLLM 기반의 Mistral-7B-Instruct 모델을 GPU 서버에 탑재하여 고속 추론 제공.
VM2는 GPU 부하를 모니터링하여 추론 서버 수를 조정할 수 있도록 구성 예정.
-
네트워크 구성:
모든 VM은 GCP VPC (VPC-SSMU-AI, 10.0.0.0/16) 하위에 위치하여 보안성과 내부 통신 최적화 확보.
3.2 수평 확장 설계
- FastAPI 서버 (VM1):
- VM1 인스턴스를 컨테이너(Docker) 기반으로 패키징
- 필요에 따라 동일 컨테이너를 복수 배포하여 API 서버 풀을 구성
- 내부 또는 외부 로드밸런서(GCP Load Balancer)를 사용해 요청 분산 처리
- 향후 Kubernetes(GKE) 기반 오토스케일링(HPA) 적용 고려
- vLLM 서버 (VM2):
- GPU 사용량 및 응답 지연 시간(p95 latency)을 모니터링하여 GPU 인스턴스 수평 확장 준비
- 동일한 모델을 서빙하는 여러 vLLM 서버 인스턴스를 생성하고, API Gateway를 통해 요청 분산
- Auto Scaling 그룹 또는 GKE Node Autoscaler 활용 가능
3.3 배포 자동화 및 운영 편의성
- CI/CD 적용 가능성:
- GitHub Actions + GCP Artifact Registry 조합으로 빌드-배포 자동화
- 새로운 코드 커밋 시 API 서버 자동 배포 가능
- 배포 버전 관리:
- FastAPI 서버는 컨테이너 이미지 버전 태깅
- vLLM 서버도 모델 버전 관리 체계 도입 (모델 교체/업그레이드 대응)
- 장애 대응 설계:
- VM/Pod 장애 발생 시 자동 재시작 설정
- GPU 부하가 급증할 경우 알림 기반 수동 스케일업 가능
4. 모니터링 체계 및 대시보드 구성
주요 모니터링 지표
구분 | 지표 | 설명 |
---|---|---|
성능 | 평균 응답 시간 (p50) / 지연 응답 시간 (p95) | 모델 추론 속도 및 지연 추적 |
성능 | TPS (Transactions Per Second) | 초당 처리 요청 수 |
안정성 | 에러율 (5xx) | 추론 실패 비율 (서버 에러 감지) |
자원 | GPU 사용률 (%) | LLM 서버 부하 모니터링 |
자원 | RAM / CPU 사용량 | 시스템 자원 과부하 감지 |
운영 | 컨테이너 상태 (FastAPI, vLLM) | 서비스 인스턴스 정상 작동 여부 |
스토리지 | 디스크 IO | DB 접근 병목 확인 (ChromaDB 읽기/쓰기 속도 등) |
시각화 구성 (Cloud Monitoring 기준)
-
요약 탭 (Dashboard Main View)
- 평균 응답 시간 (p50) 그래프
- 지연 응답 (p95) 그래프
- TPS(초당 요청 수) 그래프
- 에러율(5xx 비율) 그래프
➡️ 서비스 품질 전체 상태를 한눈에 파악할 수 있도록 구성.
-
GPU/서버 상태 모니터링
- GPU Memory Usage (%)
- GPU Compute Utilization (%)
- GPU Temperature (선택)
- CPU, RAM, Disk IO 그래프
➡️ 모델 서버의 부하/과열/리소스 소진을 실시간 감시.
-
실시간 추론 상태 모니터링
- 최근 1분/5분 추론 요청 수
- 평균 요청당 입력 토큰 수
- 요청당 추론 시간
- LLM 오류 로그 (예외 케이스 기록)
➡️ 특정 요청에서 지연 발생 여부를 신속하게 확인.
5. 로그 수집 및 알림 시스템
로그 수집 방법
1) 서버 로그 수집 (FastAPI + vLLM)
- FastAPI:
- logging 라이브러리를 활용하여 요청/응답/오류 로그를 표준 포맷(JSON 등)으로 기록
- 주요 로그 필드:
- 요청 시간, 경로, 요청자 IP, 입력 길이, 응답 시간, 응답 상태 코드
- vLLM (LLM 추론 서버):
- 추론 요청/응답 로그 + 에러 로그를 별도 파일 또는 표준 출력으로 기록
- 주요 로그 필드:
- 모델 호출 입력 길이, 출력 길이, 추론 소요 시간, 실패 여부
2) Cloud Logging 연동
- FastAPI 서버와 vLLM 추론 서버 인스턴스에 Cloud Logging Agent를 설치하여 표준 로그 파일을 실시간으로 GCP Cloud Logging으로 전송함.
- 각 서버의 주요 로그(예: /var/log/app.log 또는 커스텀 경로)를 Cloud Logging에 업로드하도록 설정하여, 운영 중 발생하는 요청, 응답, 에러 로그를 체계적으로 수집함.
- 업로드된 로그는 다음 기준으로 관리함:
- 요청, 응답, 에러 등을 구분하는 구분 태그(label) 추가
- 로그 필터링 및 검색 기능을 통해 특정 이벤트(예: 에러 발생, 처리 지연 등) 신속히 파악 가능
- 이를 기반으로 Log-based Metrics를 생성하여, Cloud Monitoring 대시보드 및 알림 트리거(Alerts) 설정에 활용할 수 있도록 준비함.
알림 설정
-
Cloud Monitoring을 사용해 수집된 Log-based Metrics 및 시스템 리소스 지표를 기반으로 알림(Alert)을 설정함.
알림 조건 설명 조치 GPU 사용률 > 85% 5분 이상 지속 LLM 서버(vLLM) 과부하 감지 Slack으로 긴급 알림 전송 API 서버 응답시간 p95 > 5초 초과 FastAPI 서버 응답 지연 감지 Slack 알림 + 서버 스케일링 검토 추론 실패율(5xx 에러율) > 3% 초과 vLLM 서버 오류 급증 감지 이메일 알림 + 원인 분석 트리거 디스크 사용량 > 80% 스토리지 부족 위험 감지 Slack 알림 + 스토리지 증설 검토
6. 향후 확장성 및 운영 안정화 전략
AI 기반 이력서 분석 및 추천 서비스는 초기 소규모 트래픽을 대상으로 하지만, 사용자 수 증가 및 기능 확장에 대비하여 다음과 같은 확장성과 안정성 전략을 마련함.
1) API 서버(FastAPI + LangChain) 확장 전략
항목 | 설명 |
---|---|
배포 구조 | FastAPI 서버를 Docker 컨테이너화하여 관리 |
수평 확장 | GCP Instance Group 또는 GKE로 이전 후, Pod/VM 수 자동 조정(HPA) |
로드밸런서 | HTTP(S) Load Balancer를 구성하여 API 서버 인스턴스 간 트래픽 분산 |
장애 대응 | 헬스체크 실패 시 자동 재기동 또는 교체 (Autohealing 설정) |
2) LLM 서버(vLLM) 확장 전략
항목 | 설명 |
---|---|
배포 구조 | vLLM 서버도 컨테이너화하여 관리 |
GPU 확장 | GCP Compute Engine + GPU Instance Template 구성 |
수평 확장 | GPU 부하(메모리 사용량 등)에 따라 vLLM 서버를 자동 증설/축소 |
예비 서버 대기 | 초고속 부팅을 위한 Preemptible GPU 인스턴스 활용 가능성 검토 |
- 대규모 추론 요청 대비를 위해 GPU 모니터링 기반 오토스케일링 트리거를 준비
- LLM 서버는 특히 GPU 메모리 사용률 기준으로 스케일링하는 것이 핵심
3) 정기 데이터 수집 및 파이프라인 안정화
항목 | 설명 |
---|---|
비동기화 | 유저 트래픽과 데이터 수집 트래픽 완전 분리 |
장애 복구 | 수집 실패 시 재시도 로직 및 Alert 설정 |
관리 자동화 | Cloud Scheduler, Pub/Sub, Cloud Functions 조합으로 파이프라인 구성 |
4) 보안 및 접근 제어
항목 | 설명 |
---|---|
네트워크 보안 | 모든 인스턴스는 Private Subnet (VPC-SSMU-AI) 내부에서 통신 |
IAM 역할 관리 | 서비스별 최소 권한 원칙 적용 (Principle of Least Privilege) |
접근 제한 | 서버 접근은 내부 관리용 IP 또는 VPN을 통해서만 허용 |