mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 05:36:23 +00:00
아키텍처 최적안 결정 및 ADR 작성
- 아키텍처_최적안_결정.md 신규 생성 (ADR-000 ~ ADR-004) - 하이브리드 접근 전략 결정: 단계적 독립 운영 → 조건부 통합 - 용어집: PostgreSQL+pgvector, 관련회의록: Azure AI Search - 구현방안-관련자료.md: AD-000 섹션 업데이트 - 구현방안-용어집.md: ADR-000, ADR-001 업데이트 및 버전 1.1 반영 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
7751efc688
commit
fc2bcc9622
@ -819,57 +819,79 @@ private RelatedMeeting createFallbackRelatedMeeting(SearchResult result) {
|
||||
|
||||
### AD-000: 통합 플랫폼 전략 (용어집 + 관련회의록)
|
||||
|
||||
**결정**: 단일 Azure AI Search 계정에 두 개의 별도 인덱스 운영
|
||||
> **⚠️ 업데이트**: 2025-10-28
|
||||
>
|
||||
> 이 섹션은 초기 계획이었으며, 최종적으로 **하이브리드 접근 전략**으로 결정되었습니다.
|
||||
>
|
||||
> **최종 결정 문서**: `design/아키텍처_최적안_결정.md` 참조
|
||||
|
||||
**통합 아키텍처**:
|
||||
**최종 결정**: 하이브리드 접근 - 단계적 독립 → 선택적 통합
|
||||
|
||||
**Phase 1-3 아키텍처** (현재 적용):
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ AI Service (Backend) │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────────────────────┐ ┌──────────────────────┐ │
|
||||
│ │ 용어집 기능 │ │ 관련회의록 기능 │ │
|
||||
│ │ (Term Glossary) │ │ (Related Meetings) │ │
|
||||
│ └──────────┬───────────┘ └──────────┬───────────┘ │
|
||||
│ │ │ │
|
||||
│ ┌──────────▼───────────┐ ┌──────────▼───────────┐ │
|
||||
│ │ PostgreSQL │ │ Azure AI Search │ │
|
||||
│ │ + pgvector │ │ (meetings-index) │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ • 소규모 (수백 건) │ │ • 대규모 (수만 건) │ │
|
||||
│ │ • 키워드 우선 │ │ • Vector 우선 │ │
|
||||
│ │ • 트랜잭션 보장 │ │ • Semantic Ranking │ │
|
||||
│ └──────────────────────┘ └──────────────────────┘ │
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────┐ │
|
||||
│ │ 공통 컴포넌트 (Shared Components) │ │
|
||||
│ ├─────────────────────────────────────────────────────┤ │
|
||||
│ │ • Azure OpenAI Embedding (text-embedding-ada-002) │ │
|
||||
│ │ • Claude 3.5 Sonnet (맥락 설명 / 요약 생성) │ │
|
||||
│ │ • Redis (L1 캐싱, TTL 1-24시간) │ │
|
||||
│ └─────────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Phase 4 통합 옵션** (조건부):
|
||||
|
||||
**통합 조건**:
|
||||
1. 용어집 데이터 규모 500개 이상
|
||||
2. PostgreSQL+pgvector 성능 이슈 (응답 시간 > 500ms)
|
||||
3. 관리 복잡도가 비용 절감액($85/월)을 상회
|
||||
|
||||
**통합시 아키텍처**:
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ Azure AI Search (단일 계정) │
|
||||
│ ┌──────────────────────┐ ┌────────────────────────────┐ │
|
||||
│ │ terms-index │ │ meetings-index │ │
|
||||
│ │ (용어집 전용) │ │ (관련회의록 전용) │ │
|
||||
│ │ - 소규모 (수백 건) │ │ - 대규모 (수만 건) │ │
|
||||
│ │ - 작은 청크(400 tok) │ │ - 큰 청크(2000-2500 tok) │ │
|
||||
│ │ - Keyword 우선 │ │ - Vector 우선 │ │
|
||||
│ │ (용어집) │ │ (관련회의록) │ │
|
||||
│ │ - 수백 건 │ │ - 수만 건 │ │
|
||||
│ │ - 256-512 tok │ │ - 2000-2500 tok │ │
|
||||
│ │ - Keyword 우선 │ │ - Hybrid + Semantic │ │
|
||||
│ └──────────────────────┘ └────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
▲
|
||||
│ 공통 사용
|
||||
┌──────────────────────────┼────────────────────────────────┐
|
||||
│ Azure OpenAI Embedding │ Claude 3.5 Sonnet │
|
||||
│ text-embedding-ada-002 │ 맥락 설명 / 요약 생성 │
|
||||
└──────────────────────────┴────────────────────────────────┘
|
||||
▲
|
||||
│ 공통 사용
|
||||
┌──────────────────────────┼────────────────────────────────┐
|
||||
│ Redis L1 Cache (1시간 TTL) │
|
||||
│ - 용어 설명 캐싱 │
|
||||
│ - 관련 회의록 추천 캐싱 │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
▲ ▲
|
||||
│ │
|
||||
┌──────────┴──────────┐ ┌───────────┴────────────┐
|
||||
│ CDN L2 Cache │ │ PostgreSQL L2 Cache │
|
||||
│ (용어 설명) │ │ (관련 회의록 매핑) │
|
||||
│ - 정적 콘텐츠 │ │ - 동적 관계 데이터 │
|
||||
└─────────────────────┘ └────────────────────────┘
|
||||
```
|
||||
|
||||
**대안 비교**:
|
||||
|
||||
| 대안 | 장점 | 단점 | 점수 |
|
||||
|-----|------|------|------|
|
||||
| **단일 계정 + 별도 인덱스** ✅ | • 비용 절감 (단일 Standard tier)<br>• 독립적 최적화<br>• 통합 관리<br>• 확장성 | • 인덱스 수 제한 고려 필요 | **10/10** |
|
||||
| 별도 Azure AI Search 계정 | • 완전 독립성<br>• 리소스 격리 | • 비용 2배 ($500/월)<br>• 관리 복잡도 증가 | 6/10 |
|
||||
| 단일 인덱스 공유 | • 가장 저렴<br>• 관리 단순 | • 스키마 충돌<br>• 성능 저하<br>• 최적화 불가 | 3/10 |
|
||||
| 별도 Vector DB (Pinecone 등) | • 특화 기능 | • 비용 증가<br>• 통합 복잡<br>• 일관성 부족 | 5/10 |
|
||||
| **하이브리드 접근** ✅ | • 각 기능별 최적 DB 선택<br>• 초기 비용 40% 절감<br>• 점진적 확장<br>• 리스크 분산 | • 관리 복잡도 증가<br>• 통합시 마이그레이션 필요 | **9/10** |
|
||||
| 단일 Azure AI Search (초기) | • 통합 관리<br>• 일관된 검색 엔진 | • 용어집 초기에 과도한 인프라<br>• 초기 비용 높음 ($250/월 추가) | 7/10 |
|
||||
| 완전 독립 (Qdrant) | • 완전 독립성<br>• 각 기능 최적화 | • 높은 운영 비용 ($1,400/월)<br>• 관리 복잡도 최고 | 5/10 |
|
||||
|
||||
**결정 이유**:
|
||||
1. **비용 효율성**: Standard tier $250/월 공유 (별도 계정 대비 50% 절감)
|
||||
2. **독립 최적화**: 각 기능별 최적 스키마 및 설정
|
||||
3. **운영 단순성**: 단일 플랫폼 통합 모니터링
|
||||
4. **확장성**: 각 인덱스 독립 스케일링
|
||||
1. **비용 효율성**: Phase 1-2에서 $250/월 절감 ($966 → $410)
|
||||
2. **기술적 타당성**: 용어집(정확 매칭) vs 관련회의록(의미 검색)의 요구사항 차이
|
||||
3. **운영 복잡도**: PostgreSQL 기존 활용으로 학습 곡선 최소화
|
||||
4. **확장성**: 명확한 마이그레이션 경로 보유
|
||||
|
||||
**공통 컴포넌트**:
|
||||
- **Embedding**: Azure OpenAI text-embedding-ada-002 (일관된 벡터 공간)
|
||||
@ -877,23 +899,42 @@ private RelatedMeeting createFallbackRelatedMeeting(SearchResult result) {
|
||||
- **L1 Cache**: Redis (통합 캐싱 플랫폼)
|
||||
|
||||
**차별화 전략**:
|
||||
- **용어집**: JSON 우선 + RAG fallback (하이브리드)
|
||||
- **관련회의록**: Hybrid Search + Semantic Ranking (순수 벡터)
|
||||
- **캐싱 L2**: CDN (정적) vs PostgreSQL (동적)
|
||||
- **용어집**: 키워드 우선 + Vector Fallback (정확성 중시)
|
||||
- **관련회의록**: Hybrid Search + Semantic Ranking (맥락 중시)
|
||||
- **캐싱 L2**: PostgreSQL (메타데이터 + 관계)
|
||||
|
||||
**비용 분석** (월간):
|
||||
```
|
||||
Azure AI Search Standard: $250
|
||||
Azure OpenAI Embedding: $55 (용어집 $25 + 관련자료 $30)
|
||||
Claude API: $366 (용어집 $150 + 관련자료 $216)
|
||||
Redis Enterprise: $50
|
||||
CDN: $10
|
||||
PostgreSQL Storage: $10
|
||||
─────────────────────────────
|
||||
통합 총계: $741/월
|
||||
|
||||
개별 계정 대비 절감: $250/월 (25% 절감)
|
||||
**Phase 3 (독립 운영)**:
|
||||
```
|
||||
PostgreSQL (용어집): $50
|
||||
Azure AI Search (회의록): $250
|
||||
Redis: $80 (통합)
|
||||
Azure OpenAI Embedding: $50
|
||||
Claude API: $516
|
||||
Storage: $20
|
||||
─────────────────────────────
|
||||
총계: $966/월
|
||||
```
|
||||
|
||||
**Phase 4 (통합시)**:
|
||||
```
|
||||
Azure AI Search (통합): $250
|
||||
PostgreSQL (메타만): $50
|
||||
Redis: $50
|
||||
Azure OpenAI Embedding: $55
|
||||
Claude API: $516
|
||||
Storage: $40
|
||||
─────────────────────────────
|
||||
총계: $881/월
|
||||
절감액: $85/월 (8.8%)
|
||||
```
|
||||
|
||||
**마이그레이션 비용**: $5,000 (일회성)
|
||||
|
||||
**참조 문서**:
|
||||
- **최종 결정**: `design/아키텍처_최적안_결정.md`
|
||||
- **용어집 상세**: `design/구현방안-용어집.md`
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -698,23 +698,39 @@ Phase 3 (고도화 - 8주):
|
||||
|
||||
**컨텍스트**:
|
||||
- 초기에는 데이터량이 적어 pgvector로 충분
|
||||
- Qdrant는 전문 벡터 DB로 성능 우수하나 인프라 복잡도 증가
|
||||
- 관련회의록 기능은 Azure AI Search 사용 (별도 독립)
|
||||
- 용어집은 정확한 키워드 매칭이 중요하여 PostgreSQL 적합
|
||||
- 단계적 접근으로 리스크 분산
|
||||
|
||||
**대안 고려**:
|
||||
1. **Pinecone**: 관리형 서비스, 쉬운 시작 vs 높은 운영 비용 ($70/월~)
|
||||
2. **Weaviate**: 오픈소스, 풍부한 기능 vs 학습 곡선 높음
|
||||
3. **pgvector**: 간단한 설정, 기존 DB 활용 vs 성능 제한
|
||||
1. **PostgreSQL+pgvector** ✅:
|
||||
- 기존 DB 활용, 트랜잭션 보장, 학습 곡선 낮음
|
||||
- 소규모에 적합, 비용 $0 (기존 DB)
|
||||
|
||||
2. **Azure AI Search (초기 도입)**:
|
||||
- 고성능 검색, Semantic Ranking, 관리형 서비스
|
||||
- 소규모에 과도, 비용 $250/월
|
||||
|
||||
3. **Qdrant (self-hosted)**:
|
||||
- 전문 Vector DB, 고성능, 오픈소스
|
||||
- 운영 부담, 학습 곡선 높음, 비용 $500/월
|
||||
|
||||
4. **Pinecone (managed)**:
|
||||
- 관리형 서비스, 쉬운 사용, 고성능
|
||||
- 비용 높음 ($70-200/월), 한국어 지원 부족
|
||||
|
||||
**결정 근거**:
|
||||
- MVP 단계에서는 pgvector의 단순성 우선
|
||||
- 사용자 1000명 이상 시 Qdrant 전환 (명확한 마이그레이션 기준)
|
||||
- 비용 효율성: pgvector 무료 vs Qdrant 자체 호스팅 $500/월 vs Pinecone $1000/월
|
||||
- **Phase 1-2**: pgvector의 단순성 및 비용 효율성 우선
|
||||
- **Phase 3 조건**: 용어 500개 이상 OR 성능 이슈 OR 관리 복잡도 증가
|
||||
- **Phase 3 옵션 A**: Azure AI Search (terms-index) 마이그레이션 ($250/월 추가 비용 없음, 관련회의록과 공유)
|
||||
- **Phase 3 옵션 B**: 현상 유지 (독립 운영)
|
||||
- **비용 효율성**: pgvector 무료 vs Azure AI Search 통합시 $0 추가 vs Qdrant $500/월
|
||||
|
||||
**결과**:
|
||||
- 초기 인프라 비용 절감 (PostgreSQL 활용)
|
||||
- 검증된 기술 스택 사용으로 팀 학습 부담 감소
|
||||
- 명확한 확장 경로 확보
|
||||
- 관련회의록과 독립적으로 운영하여 장애 격리
|
||||
- Phase 4에서 조건 충족시 Azure AI Search 통합 옵션 보유
|
||||
|
||||
---
|
||||
|
||||
@ -1811,6 +1827,11 @@ class ClaudeAPIClient:
|
||||
---
|
||||
|
||||
**작성일**: 2025-10-28
|
||||
**최종 업데이트**: 2025-10-28 (아키텍처 최적안 반영)
|
||||
**작성자**: 회의록 개선 프로젝트 팀
|
||||
**버전**: 1.0
|
||||
**승인자**: 김민준 (Product Owner)
|
||||
**버전**: 1.1
|
||||
**승인자**: 김민준 (Product Owner), 홍길동 (Architect)
|
||||
|
||||
**관련 문서**:
|
||||
- **아키텍처 최적안 결정**: `design/아키텍처_최적안_결정.md`
|
||||
- **관련회의록 구현방안**: `design/구현방안-관련자료.md`
|
||||
1172
design/아키텍처_최적안_결정.md
Normal file
1172
design/아키텍처_최적안_결정.md
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user