mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 05:36:23 +00:00
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
HGZero - AI 기반 회의록 작성 및 이력 관리 개선 서비스
1. 소개
HGZero는 업무지식이 부족한 회의록 작성자도 누락 없이 정확하게 회의록을 작성하여 공유할 수 있는 AI 기반 서비스입니다. 사용자는 실시간 음성 변환(STT), AI 요약, 용어 설명, Todo 자동 추출 등의 기능을 통해 회의록 작성 업무를 효율적으로 수행할 수 있습니다.
1.1 핵심 기능
- 실시간 STT: Azure Speech Services 기반 실시간 음성-텍스트 변환
- AI 요약: 안건별 2-3문장 자동 요약 (GPT-4o, 2-5초 처리)
- 맥락 기반 용어 설명: 관련 회의록과 업무이력 기반 실용 정보 제공
- Todo 자동 추출: 회의록에서 액션 아이템 자동 추출 및 배정
- 지능형 회의 진행 지원: 회의 패턴 분석, 안건 추천, 효율성 분석
- 실시간 협업: WebSocket 기반 실시간 회의록 편집 및 동기화
1.2 MVP 산출물
-
발표자료: AI 기반 회의록 작성 서비스
-
설계결과:
-
Git Repo:
-
시연 동영상: {시연 동영상 링크}
2. 시스템 아키텍처
2.1 전체 구조
마이크로서비스 아키텍처 기반 클라우드 네이티브 애플리케이션
┌─────────────────────────────────────────────────────────────┐
│ Frontend │
│ React 18 + TypeScript │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ NGINX Ingress │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ User Service │ │Meeting Service│ │ STT Service │
│ (Java) │ │ (Java) │ │ (Java) │
│ :8081 │ │ :8081/:8082 │ │ :8083 │
└───────────────┘ └───────────────┘ └───────────────┘
│ │ │
│ │ │
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ AI Service │ │ RAG Service │ │Notification │
│ (Java) │ │ (Python) │ │ (Java) │
│ :8083 │ │ :8000 │ │ :8084 │
└───────────────┘ └───────────────┘ └───────────────┘
│ │
└───────────────────┤
│
┌───────────────────┐
│ Event Hub │
│ (Pub/Sub MQ) │
└───────────────────┘
│
┌─────────┼─────────┐
│ │ │
┌──────────┐ ┌────────┐ ┌─────────────┐
│PostgreSQL│ │ Redis │ │ OpenAI │
│ (6 DB) │ │ Cache │ │ │
└──────────┘ └────────┘ └─────────────┘
2.2 마이크로서비스 구성
- User 서비스: 사용자 인증 (LDAP, JWT) 및 프로필 관리
- Meeting 서비스: 회의/회의록/Todo 통합 관리, 실시간 동기화 (WebSocket)
- STT 서비스: 음성 스트리밍, 실시간 STT 변환 (Azure Speech Services)
- AI 서비스: 회의록 자동요약, Todo 추출, 안건별 AI 요약
- RAG 서비스: 용어집 검색, 관련자료 검색, 회의록 유사도 검색 (Python/FastAPI)
- Notification 서비스: 이메일 알림 (회의 시작, 회의록 확정, Todo 배정)
2.3 기술 스택
- 프론트엔드: React 18, TypeScript, React Context API
- 백엔드: Spring Boot 3.2.x, Java 17, FastAPI, Python 3.11+
- 인프라: Azure Kubernetes Service (AKS), Azure Container Registry (ACR)
- CI/CD: GitHub Actions (CI), ArgoCD (CD - GitOps)
- 모니터링: Prometheus, Grafana, Spring Boot Actuator
- 백킹 서비스:
- Database: PostgreSQL 15 (Database per Service - 6개 독립 DB)
- Message Queue: Azure Event Hub (AMQP over TLS)
- Cache: Azure Redis Cache (Redis 7.x)
- AI/ML: Azure OpenAI (GPT-4o, text-embedding-3-large), Azure Speech Services, Azure AI Search
3. 백킹 서비스 설치
3.1 Database 설치
PostgreSQL 15 설치 (각 서비스별 독립 데이터베이스)
# Helm 저장소 추가
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# User 서비스용 DB
helm install hgzero-user bitnami/postgresql \
--set global.postgresql.auth.postgresPassword=Passw0rd \
--set global.postgresql.auth.username=hgzerouser \
--set global.postgresql.auth.password=Passw0rd \
--set global.postgresql.auth.database=userdb \
--namespace hgzero
# Meeting 서비스용 DB
helm install hgzero-meeting bitnami/postgresql \
--set global.postgresql.auth.postgresPassword=Passw0rd \
--set global.postgresql.auth.username=hgzerouser \
--set global.postgresql.auth.password=Passw0rd \
--set global.postgresql.auth.database=meetingdb \
--namespace hgzero
# STT 서비스용 DB
helm install hgzero-stt bitnami/postgresql \
--set global.postgresql.auth.postgresPassword=Passw0rd \
--set global.postgresql.auth.username=hgzerouser \
--set global.postgresql.auth.password=Passw0rd \
--set global.postgresql.auth.database=sttdb \
--namespace hgzero
# AI 서비스용 DB
helm install hgzero-ai bitnami/postgresql \
--set global.postgresql.auth.postgresPassword=Passw0rd \
--set global.postgresql.auth.username=hgzerouser \
--set global.postgresql.auth.password=Passw0rd \
--set global.postgresql.auth.database=aidb \
--namespace hgzero
# RAG 서비스용 DB
helm install hgzero-rag bitnami/postgresql \
--set global.postgresql.auth.postgresPassword=Passw0rd \
--set global.postgresql.auth.username=hgzerouser \
--set global.postgresql.auth.password=Passw0rd \
--set global.postgresql.auth.database=ragdb \
--namespace hgzero
# Notification 서비스용 DB
helm install hgzero-notification bitnami/postgresql \
--set global.postgresql.auth.postgresPassword=Passw0rd \
--set global.postgresql.auth.username=hgzerouser \
--set global.postgresql.auth.password=Passw0rd \
--set global.postgresql.auth.database=notificationdb \
--namespace hgzero
접속 정보 확인:
# 각 서비스별 DB 접속 정보
# User DB: hgzero-user-postgresql.hgzero.svc.cluster.local:5432
# Meeting DB: hgzero-meeting-postgresql.hgzero.svc.cluster.local:5432
# STT DB: hgzero-stt-postgresql.hgzero.svc.cluster.local:5432
# AI DB: hgzero-ai-postgresql.hgzero.svc.cluster.local:5432
# RAG DB: hgzero-rag-postgresql.hgzero.svc.cluster.local:5432
# Notification DB: hgzero-notification-postgresql.hgzero.svc.cluster.local:5432
3.2 Cache 설치
Redis 설치
# Helm으로 Redis 설치
helm install hgzero-redis bitnami/redis \
--set auth.password=Passw0rd \
--set master.persistence.enabled=true \
--set master.persistence.size=8Gi \
--namespace hgzero
# 접속 정보 확인
export REDIS_PASSWORD=$(kubectl get secret --namespace hgzero hgzero-redis -o jsonpath="{.data.redis-password}" | base64 -d)
echo "Redis Password: $REDIS_PASSWORD"
echo "Redis Host: hgzero-redis-master.hgzero.svc.cluster.local"
echo "Redis Port: 6379"
Azure Redis Cache 사용 (프로덕션):
# Azure Portal에서 Redis Cache 생성 후 연결 정보 사용
# 또는 Azure CLI 사용
az redis create \
--name hgzero-redis \
--resource-group your-resource-group \
--location koreacentral \
--sku Basic \
--vm-size c0
3.3 Message Queue 설치
Azure Event Hub 설정
# Azure CLI를 통한 Event Hub 생성
az eventhubs namespace create \
--name hgzero-eventhub-ns \
--resource-group your-resource-group \
--location koreacentral \
--sku Standard
az eventhubs eventhub create \
--name hgzero-events \
--namespace-name hgzero-eventhub-ns \
--resource-group your-resource-group \
--partition-count 4 \
--message-retention 7
# 연결 문자열 확인
az eventhubs namespace authorization-rule keys list \
--resource-group your-resource-group \
--namespace-name hgzero-eventhub-ns \
--name RootManageSharedAccessKey \
--query primaryConnectionString \
--output tsv
4. 빌드 및 배포
4.1 프론트엔드 빌드 및 배포
1. 애플리케이션 빌드
cd frontend
npm install
npm run build
2. 컨테이너 이미지 빌드
docker build \
--build-arg REACT_APP_API_URL="http://api.hgzero.com" \
--build-arg REACT_APP_WS_URL="ws://api.hgzero.com/ws" \
-f deployment/container/Dockerfile-frontend \
-t acrdigitalgarage02.azurecr.io/hgzero/frontend:latest .
3. 이미지 푸시
docker push acrdigitalgarage02.azurecr.io/hgzero/frontend:latest
4. Kubernetes 배포
kubectl apply -f deployment/k8s/frontend/frontend-deployment.yaml -n hgzero
4.2 백엔드 빌드 및 배포
1. 애플리케이션 빌드
# 전체 프로젝트 빌드
./gradlew clean build -x test
# 또는 개별 서비스 빌드
./gradlew :user:clean :user:build -x test
./gradlew :meeting:clean :meeting:build -x test
./gradlew :stt:clean :stt:build -x test
./gradlew :ai:clean :ai:build -x test
./gradlew :notification:clean :notification:build -x test
2. 컨테이너 이미지 빌드 (각 서비스별로 수행)
# User 서비스
docker build \
--build-arg BUILD_LIB_DIR="user/build/libs" \
--build-arg ARTIFACTORY_FILE="user.jar" \
-f deployment/container/Dockerfile-user \
-t acrdigitalgarage02.azurecr.io/hgzero/user-service:latest .
# Meeting 서비스
docker build \
--build-arg BUILD_LIB_DIR="meeting/build/libs" \
--build-arg ARTIFACTORY_FILE="meeting.jar" \
-f deployment/container/Dockerfile-meeting \
-t acrdigitalgarage02.azurecr.io/hgzero/meeting-service:latest .
# STT 서비스
docker build \
--build-arg BUILD_LIB_DIR="stt/build/libs" \
--build-arg ARTIFACTORY_FILE="stt.jar" \
-f deployment/container/Dockerfile-stt \
-t acrdigitalgarage02.azurecr.io/hgzero/stt-service:latest .
# AI 서비스
docker build \
--build-arg BUILD_LIB_DIR="ai/build/libs" \
--build-arg ARTIFACTORY_FILE="ai.jar" \
-f deployment/container/Dockerfile-ai \
-t acrdigitalgarage02.azurecr.io/hgzero/ai-service:latest .
# Notification 서비스
docker build \
--build-arg BUILD_LIB_DIR="notification/build/libs" \
--build-arg ARTIFACTORY_FILE="notification.jar" \
-f deployment/container/Dockerfile-notification \
-t acrdigitalgarage02.azurecr.io/hgzero/notification-service:latest .
3. RAG 서비스 빌드 (Python)
docker build \
-f deployment/container/Dockerfile-rag \
-t acrdigitalgarage02.azurecr.io/hgzero/rag-service:latest \
./rag
4. 이미지 푸시
docker push acrdigitalgarage02.azurecr.io/hgzero/user-service:latest
docker push acrdigitalgarage02.azurecr.io/hgzero/meeting-service:latest
docker push acrdigitalgarage02.azurecr.io/hgzero/stt-service:latest
docker push acrdigitalgarage02.azurecr.io/hgzero/ai-service:latest
docker push acrdigitalgarage02.azurecr.io/hgzero/rag-service:latest
docker push acrdigitalgarage02.azurecr.io/hgzero/notification-service:latest
5. Kubernetes 배포
# Namespace 생성
kubectl create namespace hgzero
# Secret 생성 (환경 변수)
kubectl apply -f deployment/k8s/backend/secrets/ -n hgzero
# 서비스 배포
kubectl apply -f deployment/k8s/backend/user-service.yaml -n hgzero
kubectl apply -f deployment/k8s/backend/meeting-service.yaml -n hgzero
kubectl apply -f deployment/k8s/backend/stt-service.yaml -n hgzero
kubectl apply -f deployment/k8s/backend/ai-service.yaml -n hgzero
kubectl apply -f deployment/k8s/backend/rag-service.yaml -n hgzero
kubectl apply -f deployment/k8s/backend/notification-service.yaml -n hgzero
# Ingress 설정
kubectl apply -f deployment/k8s/ingress.yaml -n hgzero
4.3 테스트
1) 프론트엔드 페이지 주소 구하기
# Namespace 설정
kubens hgzero
# Service 확인
kubectl get svc
# Ingress 확인
kubectl get ingress
2) API 테스트
Swagger UI 접근:
- User Service: http://{INGRESS_URL}/user/swagger-ui.html
- Meeting Service: http://{INGRESS_URL}/meeting/swagger-ui.html
- STT Service: http://{INGRESS_URL}/stt/swagger-ui.html
- AI Service: http://{INGRESS_URL}/ai/swagger-ui.html
- RAG Service: http://{INGRESS_URL}/rag/docs
- Notification Service: http://{INGRESS_URL}/notification/swagger-ui.html
3) 로그인 테스트
- ID: meeting-test
- PW: 8자리
5. 팀
- 유동희 "야보" - Product Owner
- 조민서 "다람지" - AI Specialist
- 김주환 "블랙" - Architect
- 김종희 "페퍼" - Frontend Developer
- 문효종 "카누" - Frontend Developer / DevOps Engineer
- 전대웅 "맥심" - Backend Developer
- 조윤진 "쿼카" - Backend Developer
Description
Languages
Java
45.3%
HTML
35.3%
Python
13.7%
CSS
3.2%
Shell
1.2%
Other
1.3%