diff --git a/.github/config/deploy_env_vars_ai-python_dev b/.github/config/deploy_env_vars_ai-python_dev new file mode 100644 index 0000000..ae8a229 --- /dev/null +++ b/.github/config/deploy_env_vars_ai-python_dev @@ -0,0 +1,3 @@ +# Development environment variables for ai-python service +resource_group=rg-digitalgarage-02 +cluster_name=aks-digitalgarage-02 diff --git a/.github/config/deploy_env_vars_rag_dev b/.github/config/deploy_env_vars_rag_dev new file mode 100644 index 0000000..32a5d38 --- /dev/null +++ b/.github/config/deploy_env_vars_rag_dev @@ -0,0 +1,7 @@ +# Azure Resource Configuration +resource_group=rg-digitalgarage-02 +cluster_name=aks-digitalgarage-02 + +# RAG Service Configuration +python_version=3.11 +app_port=8088 diff --git a/.github/config/deploy_env_vars_rag_prod b/.github/config/deploy_env_vars_rag_prod new file mode 100644 index 0000000..d9d4519 --- /dev/null +++ b/.github/config/deploy_env_vars_rag_prod @@ -0,0 +1,7 @@ +# Azure Resource Configuration +resource_group=rg-digitalgarage-prod +cluster_name=aks-digitalgarage-prod + +# RAG Service Configuration +python_version=3.11 +app_port=8088 diff --git a/.github/config/deploy_env_vars_rag_staging b/.github/config/deploy_env_vars_rag_staging new file mode 100644 index 0000000..8f01907 --- /dev/null +++ b/.github/config/deploy_env_vars_rag_staging @@ -0,0 +1,7 @@ +# Azure Resource Configuration +resource_group=rg-digitalgarage-staging +cluster_name=aks-digitalgarage-staging + +# RAG Service Configuration +python_version=3.11 +app_port=8088 diff --git a/.github/kustomize/base/common/ingress.yaml b/.github/kustomize/base/common/ingress.yaml index 2c9fc92..27a428c 100644 --- a/.github/kustomize/base/common/ingress.yaml +++ b/.github/kustomize/base/common/ingress.yaml @@ -32,6 +32,13 @@ spec: name: stt port: number: 8080 + - path: /api/transcripts + pathType: Prefix + backend: + service: + name: ai-service + port: + number: 8087 - path: /api/ai/suggestions pathType: Prefix backend: diff --git a/.github/workflows/ai-python-cicd_ArgoCD.yaml b/.github/workflows/ai-python-cicd_ArgoCD.yaml new file mode 100644 index 0000000..8003d26 --- /dev/null +++ b/.github/workflows/ai-python-cicd_ArgoCD.yaml @@ -0,0 +1,221 @@ +name: AI-Python Service CI/CD + +on: + push: + branches: [ main, develop ] + paths: + - 'ai-python/**' + - '.github/workflows/ai-python-cicd_ArgoCD.yaml' + pull_request: + branches: [ main ] + workflow_dispatch: + inputs: + ENVIRONMENT: + description: 'Target environment' + required: true + default: 'dev' + type: choice + options: + - dev + - staging + - prod + SKIP_TESTS: + description: 'Skip Tests' + required: false + default: 'false' + type: choice + options: + - 'false' + - 'true' + +env: + REGISTRY: acrdigitalgarage02.azurecr.io + IMAGE_ORG: hgzero + SERVICE_NAME: ai-python + RESOURCE_GROUP: rg-digitalgarage-02 + AKS_CLUSTER: aks-digitalgarage-02 + NAMESPACE: hgzero + +jobs: + build: + name: Build and Test + runs-on: ubuntu-latest + outputs: + image_tag: ${{ steps.set_outputs.outputs.image_tag }} + environment: ${{ steps.set_outputs.outputs.environment }} + + steps: + - name: Check out code + uses: actions/checkout@v4 + + - name: Set up Python 3.13 + uses: actions/setup-python@v4 + with: + python-version: '3.13' + cache: 'pip' + cache-dependency-path: 'ai-python/requirements.txt' + + - name: Determine environment + id: determine_env + run: | + ENVIRONMENT="${{ github.event.inputs.ENVIRONMENT || 'dev' }}" + echo "environment=$ENVIRONMENT" >> $GITHUB_OUTPUT + + - name: Load environment variables + id: env_vars + run: | + ENV=${{ steps.determine_env.outputs.environment }} + + REGISTRY="acrdigitalgarage02.azurecr.io" + IMAGE_ORG="hgzero" + RESOURCE_GROUP="rg-digitalgarage-02" + AKS_CLUSTER="aks-digitalgarage-02" + NAMESPACE="hgzero" + + if [[ -f ".github/config/deploy_env_vars_ai-python_${ENV}" ]]; then + while IFS= read -r line || [[ -n "$line" ]]; do + [[ "$line" =~ ^#.*$ ]] && continue + [[ -z "$line" ]] && continue + + key=$(echo "$line" | cut -d '=' -f1) + value=$(echo "$line" | cut -d '=' -f2-) + + case "$key" in + "resource_group") RESOURCE_GROUP="$value" ;; + "cluster_name") AKS_CLUSTER="$value" ;; + esac + done < ".github/config/deploy_env_vars_ai-python_${ENV}" + fi + + echo "REGISTRY=$REGISTRY" >> $GITHUB_ENV + echo "IMAGE_ORG=$IMAGE_ORG" >> $GITHUB_ENV + echo "RESOURCE_GROUP=$RESOURCE_GROUP" >> $GITHUB_ENV + echo "AKS_CLUSTER=$AKS_CLUSTER" >> $GITHUB_ENV + + - name: Install dependencies + run: | + cd ai-python + python -m pip install --upgrade pip + pip install -r requirements.txt + + - name: Run Tests + env: + SKIP_TESTS: ${{ github.event.inputs.SKIP_TESTS || 'true' }} + run: | + if [[ "$SKIP_TESTS" == "true" ]]; then + echo "⏭️ Skipping Tests (SKIP_TESTS=$SKIP_TESTS)" + exit 0 + fi + + cd ai-python + # pytest가 requirements.txt에 있다면 실행 + if pip list | grep -q "pytest"; then + if [ -d "tests" ]; then + pytest tests/ --cov=app --cov-report=xml --cov-report=html || echo "⚠️ Tests failed but continuing" + else + echo "⚠️ No tests directory found, skipping tests" + fi + else + echo "⚠️ pytest not installed, skipping tests" + fi + + echo "✅ Tests completed successfully" + + - name: Upload test results + if: always() + uses: actions/upload-artifact@v4 + with: + name: test-results + path: | + ai-python/htmlcov/ + ai-python/coverage.xml + + - name: Set outputs + id: set_outputs + run: | + IMAGE_TAG=$(date +%Y%m%d%H%M%S) + echo "image_tag=$IMAGE_TAG" >> $GITHUB_OUTPUT + echo "environment=${{ steps.determine_env.outputs.environment }}" >> $GITHUB_OUTPUT + + release: + name: Build and Push Docker Image + needs: build + runs-on: ubuntu-latest + + steps: + - name: Check out code + uses: actions/checkout@v4 + + - name: Set environment variables from build job + run: | + echo "REGISTRY=${{ env.REGISTRY }}" >> $GITHUB_ENV + echo "IMAGE_ORG=${{ env.IMAGE_ORG }}" >> $GITHUB_ENV + echo "SERVICE_NAME=${{ env.SERVICE_NAME }}" >> $GITHUB_ENV + echo "ENVIRONMENT=${{ needs.build.outputs.environment }}" >> $GITHUB_ENV + echo "IMAGE_TAG=${{ needs.build.outputs.image_tag }}" >> $GITHUB_ENV + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub (prevent rate limit) + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + + - name: Login to Azure Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ secrets.ACR_USERNAME }} + password: ${{ secrets.ACR_PASSWORD }} + + - name: Build and push Docker image + run: | + echo "Building and pushing AI-Python service..." + docker build \ + -f deployment/container/Dockerfile-ai-python \ + -t ${{ env.REGISTRY }}/${{ env.IMAGE_ORG }}/${{ env.SERVICE_NAME }}:${{ needs.build.outputs.environment }}-${{ needs.build.outputs.image_tag }} \ + ai-python/ + + docker push ${{ env.REGISTRY }}/${{ env.IMAGE_ORG }}/${{ env.SERVICE_NAME }}:${{ needs.build.outputs.environment }}-${{ needs.build.outputs.image_tag }} + + echo "✅ Docker image pushed successfully" + + update-manifest: + name: Update Manifest Repository + needs: [build, release] + runs-on: ubuntu-latest + + steps: + - name: Set image tag environment variable + run: | + echo "IMAGE_TAG=${{ needs.build.outputs.image_tag }}" >> $GITHUB_ENV + echo "ENVIRONMENT=${{ needs.build.outputs.environment }}" >> $GITHUB_ENV + + - name: Update Manifest Repository + run: | + # 매니페스트 레포지토리 클론 + REPO_URL=$(echo "https://github.com/hjmoons/hgzero-manifest.git" | sed 's|https://||') + git clone https://${{ secrets.GIT_USERNAME }}:${{ secrets.GIT_PASSWORD }}@${REPO_URL} manifest-repo + cd manifest-repo + + # Kustomize 설치 + curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash + sudo mv kustomize /usr/local/bin/ + + # 매니페스트 업데이트 + cd hgzero-back/kustomize/overlays/${{ env.ENVIRONMENT }} + + # AI-Python 서비스 이미지 태그 업데이트 + kustomize edit set image acrdigitalgarage02.azurecr.io/hgzero/ai-python:${{ env.ENVIRONMENT }}-${{ env.IMAGE_TAG }} + + # Git 설정 및 푸시 + cd ../../../.. + git config user.name "GitHub Actions" + git config user.email "actions@github.com" + git add . + git commit -m "🚀 Update AI-Python ${{ env.ENVIRONMENT }} image to ${{ env.ENVIRONMENT }}-${{ env.IMAGE_TAG }}" + git push origin main + + echo "✅ 매니페스트 업데이트 완료. ArgoCD가 자동으로 배포합니다." diff --git a/.github/workflows/backend-cicd_ArgoCD.yaml b/.github/workflows/backend-cicd_ArgoCD.yaml index bd4d3a1..2aa23f6 100644 --- a/.github/workflows/backend-cicd_ArgoCD.yaml +++ b/.github/workflows/backend-cicd_ArgoCD.yaml @@ -2,7 +2,7 @@ name: Backend Services CI/CD on: push: - branches: [ main, develop ] + branches: [ main ] paths: - 'user/**' - 'meeting/**' @@ -11,8 +11,8 @@ on: - 'notification/**' - 'common/**' - '.github/**' - pull_request: - branches: [ main ] + # pull_request: + # branches: [ main ] workflow_dispatch: inputs: ENVIRONMENT: @@ -143,6 +143,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: app-builds + retention-days: 1 path: | user/build/libs/*.jar meeting/build/libs/*.jar diff --git a/.github/workflows/rag-cicd_ArgoCD.yaml b/.github/workflows/rag-cicd_ArgoCD.yaml new file mode 100644 index 0000000..2b74c62 --- /dev/null +++ b/.github/workflows/rag-cicd_ArgoCD.yaml @@ -0,0 +1,214 @@ +name: RAG Service CI/CD + +on: + push: + branches: [ main, develop ] + paths: + - 'rag/**' + - '.github/workflows/rag-cicd_ArgoCD.yaml' + pull_request: + branches: [ main ] + workflow_dispatch: + inputs: + ENVIRONMENT: + description: 'Target environment' + required: true + default: 'dev' + type: choice + options: + - dev + - staging + - prod + SKIP_TESTS: + description: 'Skip Tests' + required: false + default: 'true' + type: choice + options: + - 'false' + - 'true' + +env: + REGISTRY: acrdigitalgarage02.azurecr.io + IMAGE_ORG: hgzero + SERVICE_NAME: rag + RESOURCE_GROUP: rg-digitalgarage-02 + AKS_CLUSTER: aks-digitalgarage-02 + NAMESPACE: hgzero + +jobs: + build: + name: Build and Test + runs-on: ubuntu-latest + outputs: + image_tag: ${{ steps.set_outputs.outputs.image_tag }} + environment: ${{ steps.set_outputs.outputs.environment }} + + steps: + - name: Check out code + uses: actions/checkout@v4 + + - name: Set up Python 3.11 + uses: actions/setup-python@v4 + with: + python-version: '3.11' + cache: 'pip' + cache-dependency-path: 'rag/requirements.txt' + + - name: Determine environment + id: determine_env + run: | + ENVIRONMENT="${{ github.event.inputs.ENVIRONMENT || 'dev' }}" + echo "environment=$ENVIRONMENT" >> $GITHUB_OUTPUT + + - name: Load environment variables + id: env_vars + run: | + ENV=${{ steps.determine_env.outputs.environment }} + + REGISTRY="acrdigitalgarage02.azurecr.io" + IMAGE_ORG="hgzero" + RESOURCE_GROUP="rg-digitalgarage-02" + AKS_CLUSTER="aks-digitalgarage-02" + NAMESPACE="hgzero" + + if [[ -f ".github/config/deploy_env_vars_rag_${ENV}" ]]; then + while IFS= read -r line || [[ -n "$line" ]]; do + [[ "$line" =~ ^#.*$ ]] && continue + [[ -z "$line" ]] && continue + + key=$(echo "$line" | cut -d '=' -f1) + value=$(echo "$line" | cut -d '=' -f2-) + + case "$key" in + "resource_group") RESOURCE_GROUP="$value" ;; + "cluster_name") AKS_CLUSTER="$value" ;; + esac + done < ".github/config/deploy_env_vars_rag_${ENV}" + fi + + echo "REGISTRY=$REGISTRY" >> $GITHUB_ENV + echo "IMAGE_ORG=$IMAGE_ORG" >> $GITHUB_ENV + echo "RESOURCE_GROUP=$RESOURCE_GROUP" >> $GITHUB_ENV + echo "AKS_CLUSTER=$AKS_CLUSTER" >> $GITHUB_ENV + + - name: Install dependencies + run: | + cd rag + python -m pip install --upgrade pip + pip install -r requirements.txt + + - name: Run Tests + env: + SKIP_TESTS: ${{ github.event.inputs.SKIP_TESTS || 'true' }} + run: | + if [[ "$SKIP_TESTS" == "true" ]]; then + echo "⏭️ Skipping Tests (SKIP_TESTS=$SKIP_TESTS)" + exit 0 + fi + + cd rag + # Run pytest with coverage + pytest tests/ --cov=src --cov-report=xml --cov-report=html + + echo "✅ Tests completed successfully" + + - name: Upload test results + if: always() + uses: actions/upload-artifact@v4 + with: + name: test-results + path: | + rag/htmlcov/ + rag/coverage.xml + + - name: Set outputs + id: set_outputs + run: | + IMAGE_TAG=$(date +%Y%m%d%H%M%S) + echo "image_tag=$IMAGE_TAG" >> $GITHUB_OUTPUT + echo "environment=${{ steps.determine_env.outputs.environment }}" >> $GITHUB_OUTPUT + + release: + name: Build and Push Docker Image + needs: build + runs-on: ubuntu-latest + + steps: + - name: Check out code + uses: actions/checkout@v4 + + - name: Set environment variables from build job + run: | + echo "REGISTRY=${{ env.REGISTRY }}" >> $GITHUB_ENV + echo "IMAGE_ORG=${{ env.IMAGE_ORG }}" >> $GITHUB_ENV + echo "SERVICE_NAME=${{ env.SERVICE_NAME }}" >> $GITHUB_ENV + echo "ENVIRONMENT=${{ needs.build.outputs.environment }}" >> $GITHUB_ENV + echo "IMAGE_TAG=${{ needs.build.outputs.image_tag }}" >> $GITHUB_ENV + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub (prevent rate limit) + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + + - name: Login to Azure Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ secrets.ACR_USERNAME }} + password: ${{ secrets.ACR_PASSWORD }} + + - name: Build and push Docker image + run: | + echo "Building and pushing RAG service..." + docker build \ + --no-cache \ + -f deployment/container/Dockerfile-rag \ + -t ${{ env.REGISTRY }}/${{ env.IMAGE_ORG }}/${{ env.SERVICE_NAME }}:${{ needs.build.outputs.environment }}-${{ needs.build.outputs.image_tag }} \ + rag/ + + docker push ${{ env.REGISTRY }}/${{ env.IMAGE_ORG }}/${{ env.SERVICE_NAME }}:${{ needs.build.outputs.environment }}-${{ needs.build.outputs.image_tag }} + + echo "✅ Docker image pushed successfully" + + update-manifest: + name: Update Manifest Repository + needs: [build, release] + runs-on: ubuntu-latest + + steps: + - name: Set image tag environment variable + run: | + echo "IMAGE_TAG=${{ needs.build.outputs.image_tag }}" >> $GITHUB_ENV + echo "ENVIRONMENT=${{ needs.build.outputs.environment }}" >> $GITHUB_ENV + + - name: Update Manifest Repository + run: | + # 매니페스트 레포지토리 클론 + REPO_URL=$(echo "https://github.com/hjmoons/hgzero-manifest.git" | sed 's|https://||') + git clone https://${{ secrets.GIT_USERNAME }}:${{ secrets.GIT_PASSWORD }}@${REPO_URL} manifest-repo + cd manifest-repo + + # Kustomize 설치 + curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash + sudo mv kustomize /usr/local/bin/ + + # 매니페스트 업데이트 + cd hgzero-back/kustomize/overlays/${{ env.ENVIRONMENT }} + + # RAG 서비스 이미지 태그 업데이트 + kustomize edit set image acrdigitalgarage02.azurecr.io/hgzero/rag:${{ env.ENVIRONMENT }}-${{ env.IMAGE_TAG }} + + # Git 설정 및 푸시 + cd ../../../.. + git config user.name "GitHub Actions" + git config user.email "actions@github.com" + git add . + git commit -m "🚀 Update RAG ${{ env.ENVIRONMENT }} image to ${{ env.ENVIRONMENT }}-${{ env.IMAGE_TAG }}" + git push origin main + + echo "✅ 매니페스트 업데이트 완료. ArgoCD가 자동으로 배포합니다." diff --git a/.gitignore b/.gitignore index 0303921..3ca4ad5 100644 --- a/.gitignore +++ b/.gitignore @@ -57,4 +57,8 @@ claudedocs/*back* logs/ **/logs/ *.log -**/*.log \ No newline at end of file +**/*.log + +# Deprecated/Backup directories +ai-java-back/ +ai/ diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..4631cca --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,215 @@ +def PIPELINE_ID = "${env.BUILD_NUMBER}" + +def getImageTag() { + def dateFormat = new java.text.SimpleDateFormat('yyyyMMddHHmmss') + def currentDate = new Date() + return dateFormat.format(currentDate) +} + +podTemplate( + label: "${PIPELINE_ID}", + serviceAccount: 'jenkins', + slaveConnectTimeout: 300, + idleMinutes: 1, + activeDeadlineSeconds: 3600, + podRetention: never(), + yaml: ''' + spec: + terminationGracePeriodSeconds: 3 + restartPolicy: Never + tolerations: + - effect: NoSchedule + key: dedicated + operator: Equal + value: cicd + ''', + containers: [ + containerTemplate( + name: 'podman', + image: "mgoltzsche/podman", + ttyEnabled: true, + command: 'cat', + privileged: true, + resourceRequestCpu: '500m', + resourceRequestMemory: '2Gi', + resourceLimitCpu: '2000m', + resourceLimitMemory: '4Gi' + ), + containerTemplate( + name: 'gradle', + image: 'gradle:jdk21', + ttyEnabled: true, + command: 'cat', + resourceRequestCpu: '500m', + resourceRequestMemory: '1Gi', + resourceLimitCpu: '1000m', + resourceLimitMemory: '2Gi', + envVars: [ + envVar(key: 'DOCKER_HOST', value: 'unix:///run/podman/podman.sock'), + envVar(key: 'TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE', value: '/run/podman/podman.sock'), + envVar(key: 'TESTCONTAINERS_RYUK_DISABLED', value: 'true') + ] + ), + containerTemplate( + name: 'git', + image: 'alpine/git:latest', + command: 'cat', + ttyEnabled: true, + resourceRequestCpu: '100m', + resourceRequestMemory: '256Mi', + resourceLimitCpu: '300m', + resourceLimitMemory: '512Mi' + ) + ], + volumes: [ + emptyDirVolume(mountPath: '/home/gradle/.gradle', memory: false), + emptyDirVolume(mountPath: '/run/podman', memory: false) + ] +) { + node(PIPELINE_ID) { + def imageTag = getImageTag() + def environment = params.ENVIRONMENT ?: 'dev' + def services = ['user', 'meeting', 'stt', 'notification'] + def registry = 'acrdigitalgarage02.azurecr.io' + def imageOrg = 'hgzero' + + try { + stage("Get Source") { + checkout scm + + // 환경 변수 로드 + def configFile = ".github/config/deploy_env_vars_${environment}" + if (fileExists(configFile)) { + echo "📋 Loading environment variables for ${environment}..." + def props = readProperties file: configFile + echo "Config loaded: ${props}" + } + } + + stage('Build') { + container('gradle') { + echo "🔨 Building with Gradle..." + sh """ + chmod +x gradlew + ./gradlew build -x test + """ + } + } + + stage('Archive Artifacts') { + echo "📦 Archiving build artifacts..." + archiveArtifacts artifacts: '**/build/libs/*.jar', fingerprint: true + } + + stage('Build & Push Images') { + timeout(time: 30, unit: 'MINUTES') { + container('podman') { + withCredentials([ + usernamePassword( + credentialsId: 'acr-credentials', + usernameVariable: 'ACR_USERNAME', + passwordVariable: 'ACR_PASSWORD' + ), + usernamePassword( + credentialsId: 'dockerhub-credentials', + usernameVariable: 'DOCKERHUB_USERNAME', + passwordVariable: 'DOCKERHUB_PASSWORD' + ) + ]) { + echo "🐳 Building and pushing Docker images..." + + // Login to Docker Hub (prevent rate limit) + sh "podman login docker.io --username \$DOCKERHUB_USERNAME --password \$DOCKERHUB_PASSWORD" + + // Login to Azure Container Registry + sh "podman login ${registry} --username \$ACR_USERNAME --password \$ACR_PASSWORD" + + // Build and push each service + services.each { service -> + echo "Building ${service}..." + + def imageTagFull = "${registry}/${imageOrg}/${service}:${environment}-${imageTag}" + + sh """ + podman build \\ + --build-arg BUILD_LIB_DIR="${service}/build/libs" \\ + --build-arg ARTIFACTORY_FILE="${service}.jar" \\ + -f deployment/container/Dockerfile-backend \\ + -t ${imageTagFull} . + """ + + echo "Pushing ${service}..." + sh "podman push ${imageTagFull}" + + echo "✅ ${service} image pushed: ${imageTagFull}" + } + } + } + } + } + + stage('Update Manifest Repository') { + container('git') { + withCredentials([usernamePassword( + credentialsId: 'github-credentials-dg0506', + usernameVariable: 'GIT_USERNAME', + passwordVariable: 'GIT_TOKEN' + )]) { + echo "📝 Updating manifest repository..." + + sh """ + # 매니페스트 레포지토리 클론 + REPO_URL=\$(echo "https://github.com/hjmoons/hgzero-manifest.git" | sed 's|https://||') + git clone https://\${GIT_USERNAME}:\${GIT_TOKEN}@\${REPO_URL} manifest-repo + cd manifest-repo + + # 각 서비스별 이미지 태그 업데이트 (sed 사용) + cd hgzero-back/kustomize/base + + services="user meeting stt notification" + for service in \$services; do + echo "Updating \$service image tag..." + sed -i "s|image: ${registry}/${imageOrg}/\$service:.*|image: ${registry}/${imageOrg}/\$service:${environment}-${imageTag}|g" \\ + \$service/deployment.yaml + + # 변경 사항 확인 + echo "Updated \$service deployment.yaml:" + grep "image: ${registry}/${imageOrg}/\$service" \$service/deployment.yaml + done + + # Git 설정 및 푸시 + cd ../../.. + git config user.name "Jenkins" + git config user.email "jenkins@hgzero.com" + git add . + git commit -m "🚀 Update hgzero ${environment} images to ${environment}-${imageTag}" + git push origin main + + echo "✅ 매니페스트 업데이트 완료. ArgoCD가 자동으로 배포합니다." + """ + } + } + } + + stage('Pipeline Complete') { + echo "🧹 Pipeline completed. Pod cleanup handled by Jenkins Kubernetes Plugin." + + if (currentBuild.result == null || currentBuild.result == 'SUCCESS') { + echo "✅ Pipeline completed successfully!" + echo "Environment: ${environment}" + echo "Image Tag: ${imageTag}" + } else { + echo "❌ Pipeline failed with result: ${currentBuild.result}" + } + } + + } catch (Exception e) { + currentBuild.result = 'FAILURE' + echo "❌ Pipeline failed with exception: ${e.getMessage()}" + throw e + } finally { + echo "🧹 Cleaning up resources and preparing for pod termination..." + echo "Pod will be terminated in 3 seconds due to terminationGracePeriodSeconds: 3" + } + } +} diff --git a/README.md b/README.md index e69de29..47186b0 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,376 @@ +# 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 산출물 +- **발표자료**: {발표자료 링크} +- **설계결과**: + - [유저스토리](design/userstory.md) + - [논리 아키텍처](design/backend/logical/logical-architecture.md) + - [API 설계서](design/backend/api/API설계서.md) +- **Git Repo**: + - **메인**: https://gitea.cbiz.kubepia.net/shared-dg05-coffeeQuokka/hgzero.git + - **프론트엔드**: {프론트엔드 Repository 링크} + - **manifest**: {Manifest Repository 링크} +- **시연 동영상**: {시연 동영상 링크} + +## 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 설치 (각 서비스별 독립 데이터베이스) + +```bash +# 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 +``` + +**접속 정보 확인**: +```bash +# 각 서비스별 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 설치 + +```bash +# 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 사용 (프로덕션)**: +```bash +# 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 설정 + +```bash +# 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. 애플리케이션 빌드 +```bash +cd frontend +npm install +npm run build +``` + +#### 2. 컨테이너 이미지 빌드 +```bash +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. 이미지 푸시 +```bash +docker push acrdigitalgarage02.azurecr.io/hgzero/frontend:latest +``` + +#### 4. Kubernetes 배포 +```bash +kubectl apply -f deployment/k8s/frontend/frontend-deployment.yaml -n hgzero +``` + +### 4.2 백엔드 빌드 및 배포 + +#### 1. 애플리케이션 빌드 +```bash +# 전체 프로젝트 빌드 +./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. 컨테이너 이미지 빌드 (각 서비스별로 수행) +```bash +# 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) +```bash +docker build \ + -f deployment/container/Dockerfile-rag \ + -t acrdigitalgarage02.azurecr.io/hgzero/rag-service:latest \ + ./rag +``` + +#### 4. 이미지 푸시 +```bash +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 배포 +```bash +# 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) 프론트엔드 페이지 주소 구하기 +```bash +# 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: user-005, user2@example.com +- PW: 8자리 + +## 5. 팀 + +- 유동희 "야보" - Product Owner +- 조민서 "다람지" - AI Specialist +- 김주환 "블랙" - Architect +- 김종희 "페퍼" - Frontend Developer +- 문효종 "카누" - Frontend Developer / DevOps Engineer +- 전대웅 "맥심" - Backend Developer +- 조윤진 "쿼카" - Backend Developer diff --git a/ai/README-ENV.md b/ai-java-back/README-ENV.md similarity index 100% rename from ai/README-ENV.md rename to ai-java-back/README-ENV.md diff --git a/ai/bin/main/application.yml b/ai-java-back/bin/main/application.yml similarity index 100% rename from ai/bin/main/application.yml rename to ai-java-back/bin/main/application.yml diff --git a/ai/bin/main/com/unicorn/hgzero/ai/AiApplication.class b/ai-java-back/bin/main/com/unicorn/hgzero/ai/AiApplication.class similarity index 100% rename from ai/bin/main/com/unicorn/hgzero/ai/AiApplication.class rename to ai-java-back/bin/main/com/unicorn/hgzero/ai/AiApplication.class diff --git a/ai/bin/main/com/unicorn/hgzero/ai/infra/controller/ExplanationController.class b/ai-java-back/bin/main/com/unicorn/hgzero/ai/infra/controller/ExplanationController.class similarity index 100% rename from ai/bin/main/com/unicorn/hgzero/ai/infra/controller/ExplanationController.class rename to ai-java-back/bin/main/com/unicorn/hgzero/ai/infra/controller/ExplanationController.class diff --git a/ai/bin/main/com/unicorn/hgzero/ai/infra/controller/RelationController.class b/ai-java-back/bin/main/com/unicorn/hgzero/ai/infra/controller/RelationController.class similarity index 100% rename from ai/bin/main/com/unicorn/hgzero/ai/infra/controller/RelationController.class rename to ai-java-back/bin/main/com/unicorn/hgzero/ai/infra/controller/RelationController.class diff --git a/ai/bin/main/com/unicorn/hgzero/ai/infra/controller/SectionController.class b/ai-java-back/bin/main/com/unicorn/hgzero/ai/infra/controller/SectionController.class similarity index 100% rename from ai/bin/main/com/unicorn/hgzero/ai/infra/controller/SectionController.class rename to ai-java-back/bin/main/com/unicorn/hgzero/ai/infra/controller/SectionController.class diff --git a/ai/bin/main/com/unicorn/hgzero/ai/infra/controller/SuggestionController.class b/ai-java-back/bin/main/com/unicorn/hgzero/ai/infra/controller/SuggestionController.class similarity index 100% rename from ai/bin/main/com/unicorn/hgzero/ai/infra/controller/SuggestionController.class rename to ai-java-back/bin/main/com/unicorn/hgzero/ai/infra/controller/SuggestionController.class diff --git a/ai/bin/main/com/unicorn/hgzero/ai/infra/controller/TermController.class b/ai-java-back/bin/main/com/unicorn/hgzero/ai/infra/controller/TermController.class similarity index 100% rename from ai/bin/main/com/unicorn/hgzero/ai/infra/controller/TermController.class rename to ai-java-back/bin/main/com/unicorn/hgzero/ai/infra/controller/TermController.class diff --git a/ai/bin/main/com/unicorn/hgzero/ai/infra/controller/TodoController.class b/ai-java-back/bin/main/com/unicorn/hgzero/ai/infra/controller/TodoController.class similarity index 100% rename from ai/bin/main/com/unicorn/hgzero/ai/infra/controller/TodoController.class rename to ai-java-back/bin/main/com/unicorn/hgzero/ai/infra/controller/TodoController.class diff --git a/ai/bin/main/com/unicorn/hgzero/ai/infra/controller/TranscriptController.class b/ai-java-back/bin/main/com/unicorn/hgzero/ai/infra/controller/TranscriptController.class similarity index 100% rename from ai/bin/main/com/unicorn/hgzero/ai/infra/controller/TranscriptController.class rename to ai-java-back/bin/main/com/unicorn/hgzero/ai/infra/controller/TranscriptController.class diff --git a/ai/build.gradle b/ai-java-back/build.gradle similarity index 100% rename from ai/build.gradle rename to ai-java-back/build.gradle diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/AiApplication.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/AiApplication.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/AiApplication.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/AiApplication.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/domain/ExtractedTodo.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/domain/ExtractedTodo.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/domain/ExtractedTodo.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/domain/ExtractedTodo.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/domain/ProcessedTranscript.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/domain/ProcessedTranscript.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/domain/ProcessedTranscript.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/domain/ProcessedTranscript.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/domain/RelatedMinutes.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/domain/RelatedMinutes.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/domain/RelatedMinutes.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/domain/RelatedMinutes.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/domain/Suggestion.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/domain/Suggestion.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/domain/Suggestion.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/domain/Suggestion.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/domain/Term.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/domain/Term.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/domain/Term.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/domain/Term.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/gateway/LlmGateway.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/gateway/LlmGateway.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/gateway/LlmGateway.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/gateway/LlmGateway.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/gateway/SearchGateway.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/gateway/SearchGateway.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/gateway/SearchGateway.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/gateway/SearchGateway.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/gateway/TranscriptGateway.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/gateway/TranscriptGateway.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/gateway/TranscriptGateway.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/gateway/TranscriptGateway.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/service/RelatedTranscriptSearchService.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/service/RelatedTranscriptSearchService.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/service/RelatedTranscriptSearchService.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/service/RelatedTranscriptSearchService.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/service/SectionSummaryService.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/service/SectionSummaryService.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/service/SectionSummaryService.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/service/SectionSummaryService.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/service/SuggestionService.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/service/SuggestionService.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/service/SuggestionService.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/service/SuggestionService.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/service/TermDetectionService.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/service/TermDetectionService.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/service/TermDetectionService.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/service/TermDetectionService.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/service/TermExplanationService.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/service/TermExplanationService.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/service/TermExplanationService.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/service/TermExplanationService.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/service/TodoExtractionService.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/service/TodoExtractionService.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/service/TodoExtractionService.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/service/TodoExtractionService.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/service/TranscriptProcessService.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/service/TranscriptProcessService.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/service/TranscriptProcessService.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/service/TranscriptProcessService.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/usecase/RelatedTranscriptSearchUseCase.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/usecase/RelatedTranscriptSearchUseCase.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/usecase/RelatedTranscriptSearchUseCase.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/usecase/RelatedTranscriptSearchUseCase.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/usecase/SectionSummaryUseCase.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/usecase/SectionSummaryUseCase.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/usecase/SectionSummaryUseCase.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/usecase/SectionSummaryUseCase.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/usecase/SuggestionUseCase.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/usecase/SuggestionUseCase.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/usecase/SuggestionUseCase.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/usecase/SuggestionUseCase.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TermDetectionUseCase.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TermDetectionUseCase.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TermDetectionUseCase.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TermDetectionUseCase.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TermExplanationUseCase.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TermExplanationUseCase.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TermExplanationUseCase.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TermExplanationUseCase.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TodoExtractionUseCase.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TodoExtractionUseCase.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TodoExtractionUseCase.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TodoExtractionUseCase.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TranscriptProcessUseCase.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TranscriptProcessUseCase.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TranscriptProcessUseCase.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/biz/usecase/TranscriptProcessUseCase.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/client/ClaudeApiClient.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/client/ClaudeApiClient.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/client/ClaudeApiClient.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/client/ClaudeApiClient.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/config/ClaudeConfig.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/config/ClaudeConfig.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/config/ClaudeConfig.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/config/ClaudeConfig.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/config/EventHubConfig.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/config/EventHubConfig.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/config/EventHubConfig.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/config/EventHubConfig.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/config/SecurityConfig.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/config/SecurityConfig.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/config/SecurityConfig.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/config/SecurityConfig.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/config/SwaggerConfig.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/config/SwaggerConfig.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/config/SwaggerConfig.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/config/SwaggerConfig.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/config/WebClientConfig.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/config/WebClientConfig.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/config/WebClientConfig.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/config/WebClientConfig.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/controller/ExplanationController.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/controller/ExplanationController.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/controller/ExplanationController.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/controller/ExplanationController.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/controller/RelationController.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/controller/RelationController.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/controller/RelationController.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/controller/RelationController.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/controller/SectionController.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/controller/SectionController.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/controller/SectionController.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/controller/SectionController.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/controller/SuggestionController.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/controller/SuggestionController.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/controller/SuggestionController.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/controller/SuggestionController.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/controller/TermController.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/controller/TermController.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/controller/TermController.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/controller/TermController.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/controller/TodoController.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/controller/TodoController.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/controller/TodoController.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/controller/TodoController.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/controller/TranscriptController.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/controller/TranscriptController.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/controller/TranscriptController.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/controller/TranscriptController.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DecisionItemDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DecisionItemDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DecisionItemDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DecisionItemDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DecisionSuggestionDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DecisionSuggestionDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DecisionSuggestionDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DecisionSuggestionDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DetectedTermDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DetectedTermDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DetectedTermDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DetectedTermDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DiscussionItemDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DiscussionItemDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DiscussionItemDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DiscussionItemDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DiscussionSuggestionDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DiscussionSuggestionDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DiscussionSuggestionDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/DiscussionSuggestionDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/ErrorResponseDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/ErrorResponseDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/ErrorResponseDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/ErrorResponseDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/ExtractedTodoDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/ExtractedTodoDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/ExtractedTodoDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/ExtractedTodoDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/HighlightInfoDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/HighlightInfoDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/HighlightInfoDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/HighlightInfoDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/MeetingContextDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/MeetingContextDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/MeetingContextDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/MeetingContextDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/PastDiscussionDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/PastDiscussionDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/PastDiscussionDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/PastDiscussionDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/RealtimeSuggestionsDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/RealtimeSuggestionsDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/RealtimeSuggestionsDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/RealtimeSuggestionsDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/ReferenceDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/ReferenceDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/ReferenceDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/ReferenceDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/RelatedProjectDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/RelatedProjectDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/RelatedProjectDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/RelatedProjectDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/RelatedTranscriptDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/RelatedTranscriptDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/RelatedTranscriptDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/RelatedTranscriptDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/SimpleSuggestionDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/SimpleSuggestionDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/SimpleSuggestionDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/SimpleSuggestionDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/TextPositionDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/TextPositionDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/TextPositionDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/TextPositionDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/TranscriptContentDto.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/TranscriptContentDto.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/TranscriptContentDto.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/common/TranscriptContentDto.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/DecisionSuggestionRequest.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/DecisionSuggestionRequest.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/DecisionSuggestionRequest.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/DecisionSuggestionRequest.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/DiscussionSuggestionRequest.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/DiscussionSuggestionRequest.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/DiscussionSuggestionRequest.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/DiscussionSuggestionRequest.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/SectionSummaryRequest.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/SectionSummaryRequest.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/SectionSummaryRequest.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/SectionSummaryRequest.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/TermDetectionRequest.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/TermDetectionRequest.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/TermDetectionRequest.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/TermDetectionRequest.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/TodoExtractionRequest.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/TodoExtractionRequest.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/TodoExtractionRequest.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/TodoExtractionRequest.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/TranscriptProcessRequest.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/TranscriptProcessRequest.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/TranscriptProcessRequest.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/request/TranscriptProcessRequest.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/DecisionSuggestionResponse.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/DecisionSuggestionResponse.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/DecisionSuggestionResponse.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/DecisionSuggestionResponse.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/DiscussionSuggestionResponse.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/DiscussionSuggestionResponse.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/DiscussionSuggestionResponse.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/DiscussionSuggestionResponse.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/RelatedTranscriptsResponse.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/RelatedTranscriptsResponse.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/RelatedTranscriptsResponse.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/RelatedTranscriptsResponse.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/SectionSummaryResponse.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/SectionSummaryResponse.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/SectionSummaryResponse.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/SectionSummaryResponse.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TermDetectionResponse.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TermDetectionResponse.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TermDetectionResponse.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TermDetectionResponse.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TermExplanationResponse.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TermExplanationResponse.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TermExplanationResponse.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TermExplanationResponse.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TodoExtractionResponse.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TodoExtractionResponse.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TodoExtractionResponse.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TodoExtractionResponse.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TranscriptProcessResponse.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TranscriptProcessResponse.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TranscriptProcessResponse.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/dto/response/TranscriptProcessResponse.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/event/TranscriptSegmentReadyEvent.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/event/TranscriptSegmentReadyEvent.java similarity index 93% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/event/TranscriptSegmentReadyEvent.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/event/TranscriptSegmentReadyEvent.java index 59cc268..be64afc 100644 --- a/ai/src/main/java/com/unicorn/hgzero/ai/infra/event/TranscriptSegmentReadyEvent.java +++ b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/event/TranscriptSegmentReadyEvent.java @@ -25,6 +25,11 @@ public class TranscriptSegmentReadyEvent { */ private String meetingId; + /** + * 세션 ID + */ + private String sessionId; + /** * 변환 텍스트 세그먼트 ID */ diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/gateway/TranscriptGatewayImpl.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/gateway/TranscriptGatewayImpl.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/gateway/TranscriptGatewayImpl.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/gateway/TranscriptGatewayImpl.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/gateway/entity/ProcessedTranscriptEntity.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/gateway/entity/ProcessedTranscriptEntity.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/gateway/entity/ProcessedTranscriptEntity.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/gateway/entity/ProcessedTranscriptEntity.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/gateway/repository/ProcessedTranscriptJpaRepository.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/gateway/repository/ProcessedTranscriptJpaRepository.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/gateway/repository/ProcessedTranscriptJpaRepository.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/gateway/repository/ProcessedTranscriptJpaRepository.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/llm/OpenAiLlmGateway.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/llm/OpenAiLlmGateway.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/llm/OpenAiLlmGateway.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/llm/OpenAiLlmGateway.java diff --git a/ai/src/main/java/com/unicorn/hgzero/ai/infra/search/AzureAiSearchGateway.java b/ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/search/AzureAiSearchGateway.java similarity index 100% rename from ai/src/main/java/com/unicorn/hgzero/ai/infra/search/AzureAiSearchGateway.java rename to ai-java-back/src/main/java/com/unicorn/hgzero/ai/infra/search/AzureAiSearchGateway.java diff --git a/ai/src/main/resources/application.yml b/ai-java-back/src/main/resources/application.yml similarity index 100% rename from ai/src/main/resources/application.yml rename to ai-java-back/src/main/resources/application.yml diff --git a/ai-python/API-DOCUMENTATION.md b/ai-python/API-DOCUMENTATION.md index 0a15167..50dd5d5 100644 --- a/ai-python/API-DOCUMENTATION.md +++ b/ai-python/API-DOCUMENTATION.md @@ -248,3 +248,53 @@ A: 네, 각 클라이언트는 독립적으로 SSE 연결을 유지합니다. **Q: 제안사항이 오지 않으면?** A: Redis에 충분한 텍스트(10개 세그먼트)가 축적되어야 분석이 시작됩니다. 5초마다 체크합니다. + +### 3. AI 텍스트 요약 생성 + +**엔드포인트**: `POST /api/v1/ai/summary/generate` + +**설명**: 텍스트를 AI로 요약하여 핵심 내용과 포인트를 추출합니다. + +**요청 본문**: +```json +{ + "text": "요약할 텍스트 내용", + "language": "ko", // ko: 한국어, en: 영어 (기본값: ko) + "style": "bullet", // bullet: 불릿포인트, paragraph: 단락형 (기본값: bullet) + "max_length": 100 // 최대 요약 길이 (단어 수) - 선택사항 +} +``` + +**응답 예시**: +```json +{ + "summary": "• 프로젝트 총 개발 기간 3개월 확정 (디자인 2주, 개발 8주, 테스트 2주)\n• 총 예산 5천만원 배정 (인건비 3천만원, 인프라 1천만원, 기타 1천만원)\n• 주간 회의 일정: 매주 화요일 오전 10시", + "key_points": [ + "프로젝트 전체 일정 3개월로 확정", + "개발 단계별 기간: 디자인 2주, 개발 8주, 테스트 2주", + "총 예산 5천만원 책정", + "예산 배분: 인건비 60%, 인프라 20%, 기타 20%", + "정기 회의: 매주 화요일 오전 10시" + ], + "word_count": 32, + "original_word_count": 46, + "compression_ratio": 0.7, + "generated_at": "2025-10-29T17:23:49.429982" +} +``` + +**요청 예시 (curl)**: +```bash +curl -X POST "http://localhost:8087/api/v1/ai/summary/generate" \ + -H "Content-Type: application/json" \ + -d '{ + "text": "오늘 회의에서는 프로젝트 일정과 예산에 대해 논의했습니다...", + "language": "ko", + "style": "bullet" + }' +``` + +**에러 응답**: +- `400 Bad Request`: 텍스트가 비어있거나 너무 짧은 경우 (최소 20자) +- `400 Bad Request`: 텍스트가 너무 긴 경우 (최대 10,000자) +- `500 Internal Server Error`: AI 처리 중 오류 발생 diff --git a/ai-python/__pycache__/main.cpython-313.pyc b/ai-python/__pycache__/main.cpython-313.pyc index bf4e11c..2266b7e 100644 Binary files a/ai-python/__pycache__/main.cpython-313.pyc and b/ai-python/__pycache__/main.cpython-313.pyc differ diff --git a/ai-python/app/__pycache__/__init__.cpython-313.pyc b/ai-python/app/__pycache__/__init__.cpython-313.pyc index 0c780e2..c89c664 100644 Binary files a/ai-python/app/__pycache__/__init__.cpython-313.pyc and b/ai-python/app/__pycache__/__init__.cpython-313.pyc differ diff --git a/ai-python/app/__pycache__/config.cpython-313.pyc b/ai-python/app/__pycache__/config.cpython-313.pyc index 624e3fa..0570a3f 100644 Binary files a/ai-python/app/__pycache__/config.cpython-313.pyc and b/ai-python/app/__pycache__/config.cpython-313.pyc differ diff --git a/ai-python/app/api/__pycache__/__init__.cpython-313.pyc b/ai-python/app/api/__pycache__/__init__.cpython-313.pyc index aaf83d5..ef685e5 100644 Binary files a/ai-python/app/api/__pycache__/__init__.cpython-313.pyc and b/ai-python/app/api/__pycache__/__init__.cpython-313.pyc differ diff --git a/ai-python/app/api/v1/__init__.py b/ai-python/app/api/v1/__init__.py index b5b6d39..3660ee0 100644 --- a/ai-python/app/api/v1/__init__.py +++ b/ai-python/app/api/v1/__init__.py @@ -2,9 +2,11 @@ from fastapi import APIRouter from .transcripts import router as transcripts_router from .suggestions import router as suggestions_router +from .summary import router as summary_router router = APIRouter() # 라우터 등록 router.include_router(transcripts_router, prefix="/transcripts", tags=["Transcripts"]) router.include_router(suggestions_router, prefix="/ai/suggestions", tags=["AI Suggestions"]) +router.include_router(summary_router, prefix="/ai/summary", tags=["AI Summary"]) diff --git a/ai-python/app/api/v1/__pycache__/__init__.cpython-313.pyc b/ai-python/app/api/v1/__pycache__/__init__.cpython-313.pyc index 8f61722..538cec6 100644 Binary files a/ai-python/app/api/v1/__pycache__/__init__.cpython-313.pyc and b/ai-python/app/api/v1/__pycache__/__init__.cpython-313.pyc differ diff --git a/ai-python/app/api/v1/__pycache__/suggestions.cpython-313.pyc b/ai-python/app/api/v1/__pycache__/suggestions.cpython-313.pyc index c812365..0f09bf2 100644 Binary files a/ai-python/app/api/v1/__pycache__/suggestions.cpython-313.pyc and b/ai-python/app/api/v1/__pycache__/suggestions.cpython-313.pyc differ diff --git a/ai-python/app/api/v1/suggestions.py b/ai-python/app/api/v1/suggestions.py index 5b27f06..5442e60 100644 --- a/ai-python/app/api/v1/suggestions.py +++ b/ai-python/app/api/v1/suggestions.py @@ -26,7 +26,7 @@ claude_service = ClaudeService() ### 동작 방식 1. Redis에서 누적된 회의 텍스트 조회 (5초마다) - 2. 임계값(10개 세그먼트) 이상이면 Claude API로 분석 + 2. 임계값(4개 세그먼트, 약 60초) 이상이면 Claude API로 분석 3. 분석 결과를 SSE 이벤트로 전송 ### SSE 이벤트 형식 @@ -116,21 +116,45 @@ async def stream_ai_suggestions(meeting_id: str): if accumulated_text: logger.info(f"텍스트 누적 완료 - meetingId: {meeting_id}, 길이: {len(accumulated_text)}") + # 이미 생성된 제안사항 조회 + existing_suggestions = await redis_service.get_generated_suggestions(meeting_id) + # Claude API로 분석 suggestions = await claude_service.analyze_suggestions(accumulated_text) if suggestions.suggestions: - # SSE 이벤트 전송 - yield { - "event": "ai-suggestion", - "id": str(current_count), - "data": suggestions.json() - } + # 중복 제거: 새로운 제안사항만 필터링 + new_suggestions = [ + s for s in suggestions.suggestions + if s.content not in existing_suggestions + ] - logger.info( - f"AI 제안사항 발행 - meetingId: {meeting_id}, " - f"개수: {len(suggestions.suggestions)}" - ) + if new_suggestions: + # 새로운 제안사항만 SSE 이벤트 전송 + from app.models import RealtimeSuggestionsResponse + filtered_response = RealtimeSuggestionsResponse(suggestions=new_suggestions) + + yield { + "event": "ai-suggestion", + "id": str(current_count), + "data": filtered_response.json() + } + + # Redis에 새로운 제안사항 저장 + for suggestion in new_suggestions: + await redis_service.add_generated_suggestion( + meeting_id, + suggestion.content + ) + + logger.info( + f"AI 제안사항 발행 - meetingId: {meeting_id}, " + f"전체: {len(suggestions.suggestions)}, 신규: {len(new_suggestions)}" + ) + else: + logger.info( + f"중복 제거 후 신규 제안사항 없음 - meetingId: {meeting_id}" + ) previous_count = current_count @@ -160,8 +184,6 @@ async def stream_ai_suggestions(meeting_id: str): headers={ "Cache-Control": "no-cache", "X-Accel-Buffering": "no", - "Access-Control-Allow-Origin": "http://localhost:8888", - "Access-Control-Allow-Credentials": "true", } ) diff --git a/ai-python/app/api/v1/summary.py b/ai-python/app/api/v1/summary.py new file mode 100644 index 0000000..d51ce7b --- /dev/null +++ b/ai-python/app/api/v1/summary.py @@ -0,0 +1,84 @@ +"""AI 요약 API 라우터""" +from fastapi import APIRouter, HTTPException +from app.models.summary import SummaryRequest, SummaryResponse +from app.services.claude_service import claude_service +import logging + +logger = logging.getLogger(__name__) +router = APIRouter() + + +@router.post("/generate", response_model=SummaryResponse) +async def generate_summary(request: SummaryRequest): + """ + 텍스트 요약 생성 API + + - **text**: 요약할 텍스트 (필수) + - **language**: 요약 언어 (ko: 한국어, en: 영어) - 기본값: ko + - **style**: 요약 스타일 (bullet: 불릿포인트, paragraph: 단락형) - 기본값: bullet + - **max_length**: 최대 요약 길이 (단어 수) - 선택사항 + + Returns: + 요약 결과 (요약문, 핵심 포인트, 통계 정보) + """ + try: + # 입력 검증 + if not request.text or len(request.text.strip()) == 0: + raise HTTPException( + status_code=400, + detail="요약할 텍스트가 비어있습니다." + ) + + if len(request.text) < 20: + raise HTTPException( + status_code=400, + detail="텍스트가 너무 짧습니다. 최소 20자 이상의 텍스트를 입력해주세요." + ) + + if len(request.text) > 10000: + raise HTTPException( + status_code=400, + detail="텍스트가 너무 깁니다. 최대 10,000자까지 요약 가능합니다." + ) + + # 언어 검증 + if request.language not in ["ko", "en"]: + raise HTTPException( + status_code=400, + detail="지원하지 않는 언어입니다. 'ko' 또는 'en'만 사용 가능합니다." + ) + + # 스타일 검증 + if request.style not in ["bullet", "paragraph"]: + raise HTTPException( + status_code=400, + detail="지원하지 않는 스타일입니다. 'bullet' 또는 'paragraph'만 사용 가능합니다." + ) + + # 최대 길이 검증 + if request.max_length and request.max_length < 10: + raise HTTPException( + status_code=400, + detail="최대 길이는 10단어 이상이어야 합니다." + ) + + logger.info(f"요약 요청 - 텍스트 길이: {len(request.text)}, 언어: {request.language}, 스타일: {request.style}") + + # Claude 서비스 호출 + result = await claude_service.generate_summary( + text=request.text, + language=request.language, + style=request.style, + max_length=request.max_length + ) + + return SummaryResponse(**result) + + except HTTPException: + raise + except Exception as e: + logger.error(f"요약 생성 중 오류 발생: {e}", exc_info=True) + raise HTTPException( + status_code=500, + detail=f"요약 생성 중 오류가 발생했습니다: {str(e)}" + ) \ No newline at end of file diff --git a/ai-python/app/config.py b/ai-python/app/config.py index 1346ea6..ce87c5e 100644 --- a/ai-python/app/config.py +++ b/ai-python/app/config.py @@ -10,12 +10,12 @@ class Settings(BaseSettings): # 서버 설정 app_name: str = "AI Service (Python)" host: str = "0.0.0.0" - port: int = 8087 # feature/stt-ai 브랜치 AI Service(8086)와 충돌 방지 + port: int = 8087 # Claude API claude_api_key: str = "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" - claude_model: str = "claude-3-5-sonnet-20240620" - claude_max_tokens: int = 250000 + claude_model: str = "claude-sonnet-4-5-20250929" + claude_max_tokens: int = 4096 claude_temperature: float = 0.7 # Redis @@ -36,14 +36,15 @@ class Settings(BaseSettings): "http://localhost:3000", "http://127.0.0.1:8888", "http://127.0.0.1:8080", - "http://127.0.0.1:3000" + "http://127.0.0.1:3000", + "http://localhost:*" # 모든 localhost 포트 허용 ] # 로깅 log_level: str = "INFO" - # 분석 임계값 (MVP 수준) - min_segments_for_analysis: int = 3 # 3개 세그먼트 = 약 15-30초 분량의 대화 + # 분석 임계값 (실시간 응답을 위해 낮춤) + min_segments_for_analysis: int = 2 # 2개 세그먼트 (약 30초, 빠른 피드백) text_retention_seconds: int = 300 # 5분 class Config: diff --git a/ai-python/app/models/__init__.py b/ai-python/app/models/__init__.py index 0863f5d..9f5c7a4 100644 --- a/ai-python/app/models/__init__.py +++ b/ai-python/app/models/__init__.py @@ -10,6 +10,10 @@ from .response import ( SimpleSuggestion, RealtimeSuggestionsResponse ) +from .summary import ( + SummaryRequest, + SummaryResponse +) __all__ = [ "ConsolidateRequest", @@ -19,4 +23,6 @@ __all__ = [ "ExtractedTodo", "SimpleSuggestion", "RealtimeSuggestionsResponse", + "SummaryRequest", + "SummaryResponse", ] diff --git a/ai-python/app/models/__pycache__/__init__.cpython-313.pyc b/ai-python/app/models/__pycache__/__init__.cpython-313.pyc index fdb4907..75b46b3 100644 Binary files a/ai-python/app/models/__pycache__/__init__.cpython-313.pyc and b/ai-python/app/models/__pycache__/__init__.cpython-313.pyc differ diff --git a/ai-python/app/models/__pycache__/response.cpython-313.pyc b/ai-python/app/models/__pycache__/response.cpython-313.pyc index 87af357..b7bbe8f 100644 Binary files a/ai-python/app/models/__pycache__/response.cpython-313.pyc and b/ai-python/app/models/__pycache__/response.cpython-313.pyc differ diff --git a/ai-python/app/models/summary.py b/ai-python/app/models/summary.py new file mode 100644 index 0000000..76b7d03 --- /dev/null +++ b/ai-python/app/models/summary.py @@ -0,0 +1,81 @@ +"""요약 관련 모델""" +from pydantic import BaseModel, Field +from typing import List, Optional +from datetime import datetime + + +class SummaryRequest(BaseModel): + """요약 요청 모델""" + text: str = Field( + ..., + description="요약할 텍스트", + example="오늘 회의에서는 프로젝트 일정과 예산에 대해 논의했습니다. 첫째, 개발 일정은 3개월로 확정되었고, 디자인 단계는 2주, 개발 단계는 8주, 테스트 단계는 2주로 배분하기로 했습니다. 둘째, 예산은 총 5천만원으로 책정되었으며, 인건비 3천만원, 인프라 비용 1천만원, 기타 비용 1천만원으로 배분됩니다. 셋째, 주간 회의는 매주 화요일 오전 10시에 진행하기로 했습니다." + ) + language: str = Field( + default="ko", + description="요약 언어 (ko: 한국어, en: 영어)", + example="ko" + ) + style: str = Field( + default="bullet", + description="요약 스타일 (bullet: 불릿 포인트, paragraph: 단락형)", + example="bullet" + ) + max_length: Optional[int] = Field( + default=None, + description="최대 요약 길이 (단어 수)", + example=100 + ) + + +class SummaryResponse(BaseModel): + """요약 응답 모델""" + summary: str = Field( + ..., + description="생성된 요약", + example="• 프로젝트 일정: 총 3개월 (디자인 2주, 개발 8주, 테스트 2주)\n• 예산: 총 5천만원 (인건비 3천만원, 인프라 1천만원, 기타 1천만원)\n• 주간 회의: 매주 화요일 오전 10시" + ) + key_points: List[str] = Field( + ..., + description="핵심 포인트 리스트", + example=[ + "프로젝트 일정 3개월 확정", + "총 예산 5천만원 책정", + "주간 회의 화요일 10시" + ] + ) + word_count: int = Field( + ..., + description="요약 단어 수", + example=42 + ) + original_word_count: int = Field( + ..., + description="원본 텍스트 단어 수", + example=156 + ) + compression_ratio: float = Field( + ..., + description="압축률 (요약 길이 / 원본 길이)", + example=0.27 + ) + generated_at: datetime = Field( + default_factory=datetime.now, + description="생성 시간" + ) + + class Config: + json_schema_extra = { + "example": { + "summary": "• 프로젝트 일정: 총 3개월 (디자인 2주, 개발 8주, 테스트 2주)\n• 예산: 총 5천만원 (인건비 3천만원, 인프라 1천만원, 기타 1천만원)\n• 주간 회의: 매주 화요일 오전 10시", + "key_points": [ + "프로젝트 일정 3개월 확정", + "총 예산 5천만원 책정", + "주간 회의 화요일 10시" + ], + "word_count": 42, + "original_word_count": 156, + "compression_ratio": 0.27, + "generated_at": "2024-10-29T17:15:30.123456" + } + } \ No newline at end of file diff --git a/ai-python/app/models/transcript.py b/ai-python/app/models/transcript.py index b9398ee..6ce27f8 100644 --- a/ai-python/app/models/transcript.py +++ b/ai-python/app/models/transcript.py @@ -20,8 +20,9 @@ class ConsolidateRequest(BaseModel): class ExtractedTodo(BaseModel): - """추출된 Todo (제목만)""" + """추출된 Todo""" title: str = Field(..., description="Todo 제목") + assignee: str = Field(default="", description="담당자 이름 (있는 경우에만)") class AgendaSummary(BaseModel): @@ -30,6 +31,7 @@ class AgendaSummary(BaseModel): agenda_title: str = Field(..., description="안건 제목") summary_short: str = Field(..., description="AI 생성 짧은 요약 (1줄, 20자 이내)") summary: str = Field(..., description="안건별 회의록 요약 (논의사항+결정사항, 사용자 수정 가능)") + decisions: List[str] = Field(default_factory=list, description="안건별 결정사항 배열 (대시보드 표시용)") pending: List[str] = Field(default_factory=list, description="보류 사항") todos: List[ExtractedTodo] = Field(default_factory=list, description="Todo 목록 (제목만)") diff --git a/ai-python/app/prompts/consolidate_prompt.py b/ai-python/app/prompts/consolidate_prompt.py index 411b915..c0e9529 100644 --- a/ai-python/app/prompts/consolidate_prompt.py +++ b/ai-python/app/prompts/consolidate_prompt.py @@ -49,13 +49,23 @@ def get_consolidate_prompt(participant_minutes: list, agendas: list = None) -> s - **agenda_number**: 안건 번호 (1, 2, 3...) - **agenda_title**: 안건 제목 (간결하게) - **summary_short**: AI가 생성한 1줄 요약 (20자 이내, 사용자 수정 불가) - - **summary**: 안건별 회의록 요약 (논의사항과 결정사항을 포함한 전체 요약) + - **summary**: 안건별 회의록 요약 (논의사항과 결정사항 모두 포함) * 회의록 수정 페이지에서 사용자가 수정할 수 있는 입력 필드 * 형식: "**논의 사항:**\n- 논의내용1\n- 논의내용2\n\n**결정 사항:**\n- 결정1\n- 결정2" * 사용자가 자유롭게 편집할 수 있도록 구조화된 텍스트로 작성 + - **decisions**: 안건별 결정사항 배열 (대시보드 표시용, summary의 결정사항 부분을 배열로 추출) + * 형식: ["결정사항1", "결정사항2", "결정사항3"] + * 회의에서 최종 결정된 사항만 포함 - **pending**: 보류 사항 배열 (추가 논의 필요 사항) - - **todos**: Todo 배열 (제목만, 담당자/마감일/우선순위 없음) - - title: Todo 제목만 추출 (예: "시장 조사 보고서 작성") + - **todos**: Todo 배열 (제목과 담당자 추출) + - title: Todo 제목 (예: "시장 조사 보고서 작성") + - assignee: 담당자 이름 (있는 경우에만, 예: "김대리", "박과장") + + **Todo 추출 가이드:** + - 자연스러운 표현도 인식: "김대리가 ~하기로 함", "박과장은 ~준비합니다", "이차장님께서 ~하시기로 하셨습니다" + - 실행 동사 패턴: ~하기로, ~준비, ~작성, ~제출, ~완료, ~진행, ~검토, ~분석 + - 담당자 패턴: "OO님", "OO이/가", "OO은/는", "OO께서" + - 기한 표현: "다음주", "이번주", "~까지", "~일까지", "~월까지" --- @@ -77,10 +87,16 @@ def get_consolidate_prompt(participant_minutes: list, agendas: list = None) -> s "agenda_title": "안건 제목", "summary_short": "짧은 요약 (20자 이내)", "summary": "**논의 사항:**\\n- 논의내용1\\n- 논의내용2\\n\\n**결정 사항:**\\n- 결정1\\n- 결정2", + "decisions": ["결정사항1", "결정사항2"], "pending": ["보류사항"], "todos": [ {{ - "title": "Todo 제목" + "title": "인플루언서 리스트 작성", + "assignee": "김대리" + }}, + {{ + "title": "캠페인 콘텐츠 기획안 초안 작성", + "assignee": "박과장" }} ] }} @@ -97,12 +113,17 @@ def get_consolidate_prompt(participant_minutes: list, agendas: list = None) -> s 3. **완전성**: 모든 필드를 빠짐없이 작성 4. **구조화**: 안건별로 명확히 분리 5. **결정사항 추출**: - - 회의 전체 결정사항(decisions)은 모든 안건의 결정사항을 포함 - - 안건별 summary에도 결정사항을 포함하여 사용자가 수정 가능하도록 작성 + - 회의 전체 결정사항(decisions): 모든 안건의 결정사항을 포함 (TEXT 형식) + - 안건별 결정사항(agenda_summaries[].decisions): 각 안건의 결정사항을 배열로 추출 + - 결정사항이 명확하게 언급된 경우에만 포함 6. **summary 작성**: - summary_short: AI가 자동 생성한 1줄 요약 (사용자 수정 불가) - - summary: 논의사항과 결정사항을 포함한 전체 요약 (사용자 수정 가능) -7. **Todo 추출**: 제목만 추출 (담당자나 마감일 없어도 됨) + - summary: 논의사항과 결정사항 모두 포함 (사용자 수정 가능) + - decisions: summary의 결정사항 부분을 배열로 별도 추출 (대시보드 표시용) +7. **Todo 추출**: + - 제목 필수, 담당자는 언급된 경우에만 추출 + - 자연스러운 표현에서 추출: "김대리가 ~하기로 함" → title: "~", assignee: "김대리" + - 담당자가 없으면 assignee: "" (빈 문자열) 8. **JSON만 출력**: 추가 설명 없이 JSON만 반환 이제 위 회의록들을 분석하여 통합 요약을 JSON 형식으로 생성해주세요. diff --git a/ai-python/app/prompts/suggestions_prompt.py b/ai-python/app/prompts/suggestions_prompt.py index c885a87..5226793 100644 --- a/ai-python/app/prompts/suggestions_prompt.py +++ b/ai-python/app/prompts/suggestions_prompt.py @@ -1,72 +1,432 @@ -"""AI 제안사항 추출 프롬프트""" +"""AI 제안사항 추출 프롬프트 (회의록 작성 MVP 최적화)""" def get_suggestions_prompt(transcript_text: str) -> tuple[str, str]: """ - 회의 텍스트에서 AI 제안사항을 추출하는 프롬프트 생성 + 회의 텍스트에서 AI 제안사항을 추출하는 프롬프트 생성 (회의록 MVP용) Returns: (system_prompt, user_prompt) 튜플 """ - system_prompt = """당신은 회의 내용 분석 전문가입니다. -회의 텍스트를 분석하여 실행 가능한 제안사항을 추출해주세요.""" + system_prompt = """당신은 실시간 회의록 작성 AI 비서입니다. - user_prompt = f"""다음 회의 내용을 분석하여 **구체적이고 실행 가능한 제안사항**을 추출해주세요. +**핵심 역할**: +회의 중 발언되는 내용을 실시간으로 분석하여, 회의록 작성자가 놓칠 수 있는 중요한 정보를 즉시 메모로 제공합니다. + +**작업 방식**: +1. 회의 안건, 결정 사항, 이슈, 액션 아이템을 자동으로 분류 +2. 담당자, 기한, 우선순위 등 구조화된 정보로 정리 +3. 단순 발언 반복이 아닌, 실무에 바로 사용 가능한 형식으로 요약 +4. 회의록 작성 시간을 70% 단축시키는 것이 목표 + +**핵심 원칙**: +- 인사말, 반복, 불필요한 추임새는 완전히 제거 +- 실제 회의록에 들어갈 내용만 추출 +- 명확하고 간결하게 (20-50자) +- 구어체 종결어미(~다, ~요, ~습니다) 제거하고 명사형으로 정리""" + + user_prompt = f"""다음 회의 대화를 실시간으로 분석하여 **회의록 메모**를 작성하세요. # 회의 내용 {transcript_text} --- -# 제안사항 추출 기준 -1. **실행 가능성**: 바로 실행할 수 있는 구체적인 액션 아이템 -2. **명확성**: 누가, 무엇을, 언제까지 해야 하는지 명확한 내용 -3. **중요도**: 회의 목표 달성에 중요한 사항 -4. **완결성**: 하나의 제안사항이 독립적으로 완결된 내용 +# 회의록 항목별 패턴 학습 -# 제안사항 유형 예시 -- **후속 작업**: "시장 조사 보고서를 다음 주까지 작성하여 공유" -- **의사결정 필요**: "예산안 3안 중 최종안을 이번 주 금요일까지 결정" -- **리스크 대응**: "법률 검토를 위해 법무팀과 사전 협의 필요" -- **일정 조율**: "다음 회의를 3월 15일로 확정하고 참석자에게 공지" -- **자료 준비**: "경쟁사 분석 자료를 회의 전까지 준비" -- **검토 요청**: "초안에 대한 팀원들의 피드백 수집 필요" -- **승인 필요**: "최종 기획안을 경영진에게 보고하여 승인 받기" +## 📋 1. 회의 안건 (Agenda) -# 제안사항 작성 가이드 -- **구체적으로**: "검토 필요" (X) → "법무팀과 계약서 조항 검토 미팅 잡기" (O) -- **명확하게**: "나중에 하기" (X) → "다음 주 화요일까지 완료" (O) -- **실행 가능하게**: "잘 되길 바람" (X) → "주간 진행상황 공유 미팅 설정" (O) +### 패턴 인식 +- "오늘 회의 안건은 ~" +- "논의할 주제는 ~" +- "다룰 내용은 ~" +- "검토할 사항은 ~" + +### ✅ 좋은 예시 +**입력**: "오늘 회의 안건은 신제품 출시 일정과 마케팅 전략입니다." +**출력**: +```json +{{ + "content": "📋 회의 안건: 신제품 출시 일정, 마케팅 전략", + "confidence": 0.95 +}} +``` + +**입력**: "다음 주 프로젝트 킥오프에 대해 논의하겠습니다." +**출력**: +```json +{{ + "content": "📋 회의 안건: 다음 주 프로젝트 킥오프", + "confidence": 0.90 +}} +``` + +### ❌ 나쁜 예시 +**입력**: "오늘 회의 안건은 신제품 출시 일정입니다." +**나쁜 출력**: +```json +{{ + "content": "오늘 회의 안건은 신제품 출시 일정입니다", ❌ 구어체 그대로 반복 + "confidence": 0.90 +}} +``` +**이유**: 구어체 종결어미(~입니다) 그대로 반복. "📋 회의 안건: 신제품 출시 일정"으로 구조화해야 함 + +--- + +## ✅ 2. 결정 사항 (Decisions) + +### 패턴 인식 +- "결정 사항은 ~", "~로 결정했습니다" +- "~하기로 했습니다", "~로 합의했습니다" +- "~로 확정됐습니다" +- "최종 결론은 ~" + +### ✅ 좋은 예시 +**입력**: "회의 결과, 신규 프로젝트는 다음 달부터 착수하기로 결정했습니다." +**출력**: +```json +{{ + "content": "✅ 결정사항: 신규 프로젝트 다음 달 착수", + "confidence": 0.95 +}} +``` + +**입력**: "최종 결론은 외주 개발사와 계약하기로 합의했습니다." +**출력**: +```json +{{ + "content": "✅ 결정사항: 외주 개발사와 계약 진행", + "confidence": 0.92 +}} +``` + +### ❌ 나쁜 예시 +**입력**: "신규 프로젝트는 다음 달부터 착수하기로 결정했습니다." +**나쁜 출력**: +```json +{{ + "content": "신규 프로젝트는 다음 달부터 착수하기로 결정했습니다", ❌ 원문 그대로 + "confidence": 0.90 +}} +``` +**이유**: 발언을 그대로 반복. "✅ 결정사항: 신규 프로젝트 다음 달 착수"로 구조화해야 함 + +--- + +## 🎯 3. 액션 아이템 (Action Items) + +### 패턴 인식 +- "~팀에서 ~해 주세요" +- "~님이 ~까지 ~하기로 했습니다" +- "~을 ~까지 완료하겠습니다" +- "~을 검토해 보겠습니다" + +### ✅ 좋은 예시 +**입력**: "개발팀에서 API 문서를 이번 주 금요일까지 작성해 주세요." +**출력**: +```json +{{ + "content": "🎯 개발팀: API 문서 작성 (기한: 이번 주 금요일)", + "confidence": 0.95 +}} +``` + +**입력**: "김 팀장님이 내일까지 견적서를 검토해서 회신하기로 했습니다." +**출력**: +```json +{{ + "content": "🎯 김 팀장: 견적서 검토 및 회신 (기한: 내일)", + "confidence": 0.93 +}} +``` + +**입력**: "제가 고객사에 연락해서 미팅 일정 잡도록 하겠습니다." +**출력**: +```json +{{ + "content": "🎯 고객사 미팅 일정 조율 예정", + "confidence": 0.85 +}} +``` + +### ❌ 나쁜 예시 +**입력**: "개발팀에서 API 문서를 이번 주 금요일까지 작성해 주세요." +**나쁜 출력 1**: +```json +{{ + "content": "개발팀에서 API 문서를 이번 주 금요일까지 작성해 주세요", ❌ 원문 반복 + "confidence": 0.90 +}} +``` +**나쁜 출력 2**: +```json +{{ + "content": "API 문서 작성", ❌ 담당자와 기한 누락 + "confidence": 0.80 +}} +``` +**이유**: "🎯 개발팀: API 문서 작성 (기한: 이번 주 금요일)" 형식으로 구조화해야 함 + +--- + +## ⚠️ 4. 이슈/문제점 (Issues) + +### 패턴 인식 +- "문제가 있습니다", "이슈가 발생했습니다" +- "우려되는 점은 ~" +- "해결이 필요한 부분은 ~" +- "리스크가 있습니다" + +### ✅ 좋은 예시 +**입력**: "현재 서버 성능 이슈가 발생해서 긴급 점검이 필요합니다." +**출력**: +```json +{{ + "content": "⚠️ 이슈: 서버 성능 문제 발생, 긴급 점검 필요", + "confidence": 0.92 +}} +``` + +**입력**: "예산이 부족할 것 같다는 우려가 있습니다." +**출력**: +```json +{{ + "content": "⚠️ 이슈: 예산 부족 우려", + "confidence": 0.80 +}} +``` + +### ❌ 나쁜 예시 +**입력**: "현재 서버 성능 이슈가 발생했습니다." +**나쁜 출력**: +```json +{{ + "content": "현재 서버 성능 이슈가 발생했습니다", ❌ 구어체 그대로 + "confidence": 0.85 +}} +``` +**이유**: "⚠️ 이슈: 서버 성능 문제 발생"으로 구조화하고 구어체 제거해야 함 + +--- + +## 💡 5. 아이디어/제안 (Suggestions) + +### 패턴 인식 +- "제안하는 바는 ~" +- "~하는 것이 좋을 것 같습니다" +- "~을 고려해 볼 필요가 있습니다" + +### ✅ 좋은 예시 +**입력**: "자동화 테스트를 도입하는 것을 검토해 보면 좋을 것 같습니다." +**출력**: +```json +{{ + "content": "💡 제안: 자동화 테스트 도입 검토", + "confidence": 0.85 +}} +``` + +--- + +## 📊 6. 진행 상황/보고 (Progress) + +### 패턴 인식 +- "~까지 완료했습니다" +- "현재 ~% 진행 중입니다" +- "~단계까지 진행됐습니다" + +### ✅ 좋은 예시 +**입력**: "현재 설계 단계는 80% 완료됐고, 다음 주부터 개발 착수 가능합니다." +**출력**: +```json +{{ + "content": "📊 진행상황: 설계 80% 완료, 다음 주 개발 착수 예정", + "confidence": 0.90 +}} +``` + +--- + +## ❌ 제외해야 할 내용 (반드시 제외) + +### 인사말 +**입력**: "안녕하세요, 여러분. 회의 시작하겠습니다." +**출력**: (메모 없음 - 인사말은 제외) + +### 단순 반복 +**입력**: "녹음을 시작합니다. 녹음을 시작합니다." +**출력**: (메모 없음 - 형식적 발언 제외) + +### 추임새/불필요한 발언 +**입력**: "음, 그러니까, 네 네, 저기요..." +**출력**: (메모 없음 - 추임새 제외) + +### 형식적 마무리 +**입력**: "수고하셨습니다. 회의를 마치겠습니다." +**출력**: (메모 없음 - 형식적 마무리 제외) + +--- + +# 실전 회의 시뮬레이션 + +## 예시 1: 프로젝트 킥오프 회의 + +**입력**: +"안녕하세요. 오늘 회의 안건은 신규 프로젝트 킥오프입니다. 프로젝트명은 HGZero이고, 목표는 회의록 자동화입니다. 개발팀에서 다음 주 월요일까지 기술 스택을 검토해 주세요. 예산은 5천만원으로 확정됐습니다." + +**출력**: +```json +{{ + "suggestions": [ + {{ + "content": "📋 회의 안건: 신규 프로젝트(HGZero) 킥오프 - 회의록 자동화", + "confidence": 0.95 + }}, + {{ + "content": "🎯 개발팀: 기술 스택 검토 (기한: 다음 주 월요일)", + "confidence": 0.93 + }}, + {{ + "content": "✅ 결정사항: 프로젝트 예산 5천만원 확정", + "confidence": 0.95 + }} + ] +}} +``` + +--- + +## 예시 2: 이슈 대응 회의 + +**입력**: +"현재 프로덕션 서버에서 성능 저하가 발생하고 있습니다. 인프라팀에서 긴급 점검을 진행하기로 했고, 오늘 오후 3시까지 원인 파악하겠습니다. 고객사에는 임시로 사과 공지를 게시하기로 결정했습니다." + +**출력**: +```json +{{ + "suggestions": [ + {{ + "content": "⚠️ 이슈: 프로덕션 서버 성능 저하 발생", + "confidence": 0.95 + }}, + {{ + "content": "🎯 인프라팀: 긴급 점검 및 원인 파악 (기한: 오늘 오후 3시)", + "confidence": 0.93 + }}, + {{ + "content": "✅ 결정사항: 고객사 사과 공지 게시", + "confidence": 0.90 + }} + ] +}} +``` + +--- + +## 예시 3: 일반 업무 회의 (나쁜 예시 포함) + +**입력**: +"안녕하세요, 안녕하세요. 녹음을 시작합니다. 음, 그러니까 마케팅 캠페인을 다음 달에 진행하기로 했습니다. 김 과장님이 기획안을 이번 주까지 작성해 주세요. 감사합니다." + +**❌ 나쁜 출력**: +```json +{{ + "suggestions": [ + {{ + "content": "안녕하세요", ❌ 인사말 포함 + "confidence": 0.50 + }}, + {{ + "content": "녹음을 시작합니다", ❌ 형식적 발언 + "confidence": 0.60 + }}, + {{ + "content": "마케팅 캠페인을 다음 달에 진행하기로 했습니다", ❌ 구어체 그대로 + "confidence": 0.80 + }} + ] +}} +``` + +**✅ 좋은 출력**: +```json +{{ + "suggestions": [ + {{ + "content": "✅ 결정사항: 마케팅 캠페인 다음 달 진행", + "confidence": 0.92 + }}, + {{ + "content": "🎯 김 과장: 캠페인 기획안 작성 (기한: 이번 주)", + "confidence": 0.93 + }} + ] +}} +``` --- # 출력 형식 + 반드시 아래 JSON 형식으로만 응답하세요: ```json {{ "suggestions": [ {{ - "content": "제안사항 내용 (구체적이고 실행 가능하게, 50자 이상 작성)", - "confidence": 0.85 (이 제안사항의 중요도/확실성, 0.7-1.0 사이) - }}, - {{ - "content": "또 다른 제안사항", - "confidence": 0.92 + "content": "📋/✅/🎯/⚠️/💡/📊 분류: 구체적인 내용 (담당자/기한 포함)", + "confidence": 0.85 }} ] }} ``` -# 중요 규칙 -1. **회의 내용에 명시된 사항만** 추출 (추측하지 않기) -2. **최소 3개, 최대 7개**의 제안사항 추출 -3. 중요도가 높은 순서로 정렬 -4. confidence는 **0.7 이상**만 포함 -5. 각 제안사항은 **50자 이상** 구체적으로 작성 -6. JSON만 출력 (```json이나 다른 텍스트 포함 금지) +--- -이제 위 회의 내용에서 제안사항을 JSON 형식으로 추출해주세요.""" +# 최종 작성 규칙 + +## ✅ 반드시 지켜야 할 규칙 + +1. **이모지 분류 필수** + - 📋 회의 안건 + - ✅ 결정사항 + - 🎯 액션 아이템 + - ⚠️ 이슈/문제점 + - 💡 제안/아이디어 + - 📊 진행상황 + +2. **구조화 필수** + - 담당자가 있으면 반드시 명시 + - 기한이 있으면 반드시 포함 + - 형식: "담당자: 업무 내용 (기한: XX)" + +3. **구어체 종결어미 제거** + - ❌ "~입니다", "~했습니다", "~해요", "~합니다" + - ✅ 명사형 종결: "~ 진행", "~ 완료", "~ 확정", "~ 검토" + +4. **반드시 제외** + - 인사말 ("안녕하세요", "감사합니다", "수고하셨습니다") + - 반복/추임새 ("네 네", "음 음", "그러니까", "저기") + - 형식적 발언 ("녹음 시작", "회의 종료", "회의 시작") + +5. **길이** + - 20-70자 (너무 짧거나 길지 않게) + +6. **confidence 기준** + - 0.90-1.0: 명확한 결정사항, 기한 포함 + - 0.80-0.89: 일반적인 액션 아이템 + - 0.70-0.79: 암묵적이거나 추측 필요 + +7. **출력** + - JSON만 출력 (주석, 설명, ```json 모두 금지) + - 최소 1개 이상 추출 (의미 있는 내용이 없으면 빈 배열) + +--- + +이제 위 회의 내용을 분석하여 **회의록 메모**를 JSON 형식으로 작성하세요. +학습한 패턴을 활용하여 회의 안건, 결정사항, 액션 아이템, 이슈 등을 자동으로 분류하고 구조화하세요. +반드시 구어체 종결어미(~다, ~요, ~습니다)를 제거하고 명사형으로 정리하세요.""" return system_prompt, user_prompt diff --git a/ai-python/app/prompts/summary_prompt.py b/ai-python/app/prompts/summary_prompt.py new file mode 100644 index 0000000..b0c61dc --- /dev/null +++ b/ai-python/app/prompts/summary_prompt.py @@ -0,0 +1,80 @@ +"""요약 생성용 프롬프트""" + + +def get_summary_prompt(text: str, language: str = "ko", style: str = "bullet", max_length: int = None): + """ + 텍스트 요약을 위한 프롬프트 생성 + + Args: + text: 요약할 텍스트 + language: 요약 언어 (ko/en) + style: 요약 스타일 (bullet/paragraph) + max_length: 최대 요약 길이 (단어 수) + + Returns: + tuple: (system_prompt, user_prompt) + """ + + # 언어별 설정 + if language == "ko": + lang_instruction = "한국어로 요약을 작성하세요." + bullet_prefix = "•" + style_name = "불릿 포인트" if style == "bullet" else "단락형" + else: + lang_instruction = "Write the summary in English." + bullet_prefix = "•" + style_name = "bullet points" if style == "bullet" else "paragraph" + + # 길이 제한 설정 + length_instruction = "" + if max_length: + if language == "ko": + length_instruction = f"\n- 요약은 {max_length}단어 이내로 작성하세요." + else: + length_instruction = f"\n- Keep the summary within {max_length} words." + + system_prompt = f"""당신은 전문적인 텍스트 요약 전문가입니다. +주어진 텍스트를 명확하고 간결하게 요약하는 것이 당신의 임무입니다. + +요약 원칙: +1. 핵심 정보를 빠뜨리지 않고 포함 +2. 중복되는 내용은 제거 +3. 원문의 의미를 왜곡하지 않음 +4. {style_name} 형식으로 작성 +5. {lang_instruction}{length_instruction} + +응답은 반드시 다음 JSON 형식으로 제공하세요: +{{ + "summary": "요약 내용", + "key_points": ["핵심 포인트 1", "핵심 포인트 2", ...], + "analysis": {{ + "main_topics": ["주요 주제들"], + "sentiment": "positive/negative/neutral", + "importance_level": "high/medium/low" + }} +}}""" + + if style == "bullet": + style_instruction = f""" +불릿 포인트 형식 지침: +- 각 포인트는 '{bullet_prefix}'로 시작 +- 하나의 포인트는 한 문장으로 구성 +- 가장 중요한 정보부터 나열 +- 3-7개의 주요 포인트로 구성""" + else: + style_instruction = """ +단락형 형식 지침: +- 자연스러운 문장으로 연결 +- 논리적 흐름을 유지 +- 적절한 접속사 사용 +- 2-3개의 단락으로 구성""" + + user_prompt = f"""다음 텍스트를 요약해주세요: + +{text} + +{style_instruction} + +JSON 형식으로 응답하세요.""" + + return system_prompt, user_prompt \ No newline at end of file diff --git a/ai-python/app/services/__pycache__/__init__.cpython-313.pyc b/ai-python/app/services/__pycache__/__init__.cpython-313.pyc index 37982cc..bf47d50 100644 Binary files a/ai-python/app/services/__pycache__/__init__.cpython-313.pyc and b/ai-python/app/services/__pycache__/__init__.cpython-313.pyc differ diff --git a/ai-python/app/services/__pycache__/claude_service.cpython-313.pyc b/ai-python/app/services/__pycache__/claude_service.cpython-313.pyc index ebcc1e3..8530a2e 100644 Binary files a/ai-python/app/services/__pycache__/claude_service.cpython-313.pyc and b/ai-python/app/services/__pycache__/claude_service.cpython-313.pyc differ diff --git a/ai-python/app/services/__pycache__/eventhub_service.cpython-313.pyc b/ai-python/app/services/__pycache__/eventhub_service.cpython-313.pyc index 898073c..d9f515b 100644 Binary files a/ai-python/app/services/__pycache__/eventhub_service.cpython-313.pyc and b/ai-python/app/services/__pycache__/eventhub_service.cpython-313.pyc differ diff --git a/ai-python/app/services/__pycache__/redis_service.cpython-313.pyc b/ai-python/app/services/__pycache__/redis_service.cpython-313.pyc index 5acd9cb..8035b82 100644 Binary files a/ai-python/app/services/__pycache__/redis_service.cpython-313.pyc and b/ai-python/app/services/__pycache__/redis_service.cpython-313.pyc differ diff --git a/ai-python/app/services/claude_service.py b/ai-python/app/services/claude_service.py index 896da50..a2b4dcf 100644 --- a/ai-python/app/services/claude_service.py +++ b/ai-python/app/services/claude_service.py @@ -133,6 +133,76 @@ class ClaudeService: logger.error(f"제안사항 분석 실패: {e}", exc_info=True) # 빈 응답 반환 return RealtimeSuggestionsResponse(suggestions=[]) + + async def generate_summary( + self, + text: str, + language: str = "ko", + style: str = "bullet", + max_length: int = None + ) -> Dict[str, Any]: + """ + 텍스트 요약 생성 + + Args: + text: 요약할 텍스트 + language: 요약 언어 (ko/en) + style: 요약 스타일 (bullet/paragraph) + max_length: 최대 요약 길이 + + Returns: + 요약 결과 딕셔너리 + """ + from app.models.summary import SummaryResponse + from app.prompts.summary_prompt import get_summary_prompt + + try: + # 프롬프트 생성 + system_prompt, user_prompt = get_summary_prompt( + text=text, + language=language, + style=style, + max_length=max_length + ) + + # Claude API 호출 + result = await self.generate_completion( + prompt=user_prompt, + system_prompt=system_prompt + ) + + # 단어 수 계산 + summary_text = result.get("summary", "") + key_points = result.get("key_points", []) + + # 한국어와 영어의 단어 수 계산 방식 다르게 처리 + if language == "ko": + # 한국어: 공백으로 구분된 어절 수 + original_word_count = len(text.split()) + summary_word_count = len(summary_text.split()) + else: + # 영어: 공백으로 구분된 단어 수 + original_word_count = len(text.split()) + summary_word_count = len(summary_text.split()) + + compression_ratio = summary_word_count / original_word_count if original_word_count > 0 else 0 + + # 응답 생성 + response = SummaryResponse( + summary=summary_text, + key_points=key_points, + word_count=summary_word_count, + original_word_count=original_word_count, + compression_ratio=round(compression_ratio, 2) + ) + + logger.info(f"요약 생성 완료 - 원본: {original_word_count}단어, 요약: {summary_word_count}단어") + + return response.model_dump() + + except Exception as e: + logger.error(f"요약 생성 실패: {e}", exc_info=True) + raise # 싱글톤 인스턴스 diff --git a/ai-python/app/services/eventhub_service.py b/ai-python/app/services/eventhub_service.py index 6cea95f..b083a1a 100644 --- a/ai-python/app/services/eventhub_service.py +++ b/ai-python/app/services/eventhub_service.py @@ -2,6 +2,7 @@ import asyncio import logging import json +from datetime import datetime from azure.eventhub.aio import EventHubConsumerClient from app.config import get_settings @@ -63,12 +64,30 @@ class EventHubService: } """ try: - # 이벤트 원본 데이터 로깅 - raw_body = event.body_as_str() - logger.info(f"수신한 이벤트 원본 (처음 300자): {raw_body[:300]}") + # 이벤트 원본 데이터 추출 + try: + # Event Hub 데이터는 bytes 또는 str일 수 있음 + if hasattr(event, 'body_as_str'): + raw_body = event.body_as_str() + elif hasattr(event, 'body'): + raw_body = event.body.decode('utf-8') if isinstance(event.body, bytes) else str(event.body) + else: + logger.error(f"이벤트 타입 미지원: {type(event)}") + return + + logger.info(f"수신한 이벤트 원본 (처음 300자): {raw_body[:300]}") + logger.debug(f"이벤트 전체 길이: {len(raw_body)}자") + except Exception as extract_error: + logger.error(f"이벤트 데이터 추출 실패: {extract_error}", exc_info=True) + return # 이벤트 데이터 파싱 - event_data = json.loads(raw_body) + try: + event_data = json.loads(raw_body) + except json.JSONDecodeError as json_error: + logger.error(f"JSON 파싱 실패 - 전체 데이터: {raw_body}") + logger.error(f"파싱 에러: {json_error}") + return event_type = event_data.get("eventType") meeting_id = event_data.get("meetingId") @@ -78,7 +97,6 @@ class EventHubService: # timestamp 변환: LocalDateTime 배열 → Unix timestamp (ms) # Java LocalDateTime은 [year, month, day, hour, minute, second, nano] 형식 if isinstance(timestamp_raw, list) and len(timestamp_raw) >= 3: - from datetime import datetime year, month, day = timestamp_raw[0:3] hour = timestamp_raw[3] if len(timestamp_raw) > 3 else 0 minute = timestamp_raw[4] if len(timestamp_raw) > 4 else 0 diff --git a/ai-python/app/services/redis_service.py b/ai-python/app/services/redis_service.py index 018d6c5..3eab7c4 100644 --- a/ai-python/app/services/redis_service.py +++ b/ai-python/app/services/redis_service.py @@ -105,6 +105,34 @@ class RedisService: count = await self.redis_client.zcard(key) return count if count else 0 + async def add_generated_suggestion(self, meeting_id: str, suggestion_content: str): + """ + 생성된 제안사항 저장 (중복 방지용) + + Args: + meeting_id: 회의 ID + suggestion_content: 제안사항 내용 + """ + key = f"meeting:{meeting_id}:suggestions" + await self.redis_client.sadd(key, suggestion_content) + # TTL 설정 (1시간) + await self.redis_client.expire(key, 3600) + logger.debug(f"제안사항 저장 - meetingId: {meeting_id}") + + async def get_generated_suggestions(self, meeting_id: str) -> set: + """ + 이미 생성된 제안사항 목록 조회 + + Args: + meeting_id: 회의 ID + + Returns: + 제안사항 set + """ + key = f"meeting:{meeting_id}:suggestions" + suggestions = await self.redis_client.smembers(key) + return suggestions if suggestions else set() + async def cleanup_meeting_data(self, meeting_id: str): """ 회의 종료 시 데이터 정리 @@ -112,6 +140,10 @@ class RedisService: Args: meeting_id: 회의 ID """ - key = f"meeting:{meeting_id}:transcript" - await self.redis_client.delete(key) + transcript_key = f"meeting:{meeting_id}:transcript" + suggestions_key = f"meeting:{meeting_id}:suggestions" + + await self.redis_client.delete(transcript_key) + await self.redis_client.delete(suggestions_key) + logger.info(f"회의 데이터 정리 완료 - meetingId: {meeting_id}") diff --git a/ai-python/app/services/transcript_service.py b/ai-python/app/services/transcript_service.py index 6bdd0b5..83ba7fc 100644 --- a/ai-python/app/services/transcript_service.py +++ b/ai-python/app/services/transcript_service.py @@ -96,6 +96,7 @@ class TranscriptService: agenda_title=agenda_data.get("agenda_title", ""), summary_short=agenda_data.get("summary_short", ""), summary=agenda_data.get("summary", ""), + decisions=agenda_data.get("decisions", []), pending=agenda_data.get("pending", []), todos=todos ) diff --git a/ai-python/main.py b/ai-python/main.py index 5e6d0e9..e140050 100644 --- a/ai-python/main.py +++ b/ai-python/main.py @@ -28,13 +28,24 @@ app = FastAPI( openapi_url="/api/openapi.json" ) -# CORS 미들웨어 설정 +# CORS 미들웨어 설정 (SSE 지원) app.add_middleware( CORSMiddleware, - allow_origins=settings.cors_origins, + allow_origins=["*"], # 개발 환경에서는 모든 origin 허용 allow_credentials=True, - allow_methods=["*"], - allow_headers=["*"], + allow_methods=["GET", "POST", "OPTIONS"], + allow_headers=[ + "Authorization", + "Content-Type", + "X-Requested-With", + "Accept", + "Origin", + "Access-Control-Request-Method", + "Access-Control-Request-Headers", + "Cache-Control", + "X-Accel-Buffering" + ], + expose_headers=["*"], ) # API 라우터 등록 diff --git a/ai-python/requirements.txt b/ai-python/requirements.txt index 17e911b..4ef901b 100644 --- a/ai-python/requirements.txt +++ b/ai-python/requirements.txt @@ -9,3 +9,12 @@ anthropic==0.39.0 # Utilities python-dotenv==1.0.1 + +sse-starlette==1.8.2 # fastapi 0.115.0과 호환되는 버전 +httpx==0.26.0 # anthropic 0.39.0과 호환되는 버전 + +# Redis +redis==5.2.1 + +# Azure Event Hub +azure-eventhub==5.15.0 diff --git a/ai-python/restart.sh b/ai-python/restart.sh index 78afc44..b166c1a 100755 --- a/ai-python/restart.sh +++ b/ai-python/restart.sh @@ -1,7 +1,7 @@ #!/bin/bash # AI Python 서비스 재시작 스크립트 -# 8086 포트로 깔끔하게 재시작 +# 8087 포트로 깔끔하게 재시작 echo "==================================" echo "AI Python 서비스 재시작" @@ -18,23 +18,23 @@ sleep 2 # 2. 포트 확인 echo "2️⃣ 포트 상태 확인..." -if lsof -i:8086 > /dev/null 2>&1; then - echo " ⚠️ 8086 포트가 아직 사용 중입니다." +if lsof -i:8087 > /dev/null 2>&1; then + echo " ⚠️ 8087 포트가 아직 사용 중입니다." echo " 강제 종료 시도..." - PID=$(lsof -ti:8086) + PID=$(lsof -ti:8087) if [ ! -z "$PID" ]; then kill -9 $PID sleep 2 fi fi -if lsof -i:8086 > /dev/null 2>&1; then - echo " ❌ 8086 포트를 해제할 수 없습니다." +if lsof -i:8087 > /dev/null 2>&1; then + echo " ❌ 8087 포트를 해제할 수 없습니다." echo " 시스템 재부팅 후 다시 시도하거나," echo " 다른 포트를 사용하세요." exit 1 else - echo " ✅ 8086 포트 사용 가능" + echo " ✅ 8087 포트 사용 가능" fi # 3. 가상환경 활성화 @@ -51,7 +51,7 @@ echo " ✅ 가상환경 활성화 완료" mkdir -p ../logs # 5. 서비스 시작 -echo "4️⃣ AI Python 서비스 시작 (포트: 8086)..." +echo "4️⃣ AI Python 서비스 시작 (포트: 8087)..." nohup python3 main.py > ../logs/ai-python.log 2>&1 & PID=$! @@ -76,16 +76,16 @@ else fi # 포트 확인 -if lsof -i:8086 > /dev/null 2>&1; then - echo " ✅ 8086 포트 리스닝 중" +if lsof -i:8087 > /dev/null 2>&1; then + echo " ✅ 8087 포트 리스닝 중" else - echo " ⚠️ 8086 포트 아직 준비 중..." + echo " ⚠️ 8087 포트 아직 준비 중..." fi # Health 체크 echo "7️⃣ Health Check..." sleep 2 -HEALTH=$(curl -s http://localhost:8086/health 2>/dev/null) +HEALTH=$(curl -s http://localhost:8087/health 2>/dev/null) if [ $? -eq 0 ]; then echo " ✅ Health Check 성공" @@ -103,13 +103,13 @@ echo "✅ AI Python 서비스 시작 완료" echo "==================================" echo "📊 서비스 정보:" echo " - PID: $PID" -echo " - 포트: 8086" +echo " - 포트: 8087" echo " - 로그: tail -f ../logs/ai-python.log" echo "" echo "📡 엔드포인트:" -echo " - Health: http://localhost:8086/health" -echo " - Root: http://localhost:8086/" -echo " - Swagger: http://localhost:8086/swagger-ui.html" +echo " - Health: http://localhost:8087/health" +echo " - Root: http://localhost:8087/" +echo " - Swagger: http://localhost:8087/swagger-ui.html" echo "" echo "🛑 서비스 중지: pkill -f 'python.*main.py'" echo "==================================" diff --git a/ai/.run/ai-service.run.xml b/ai/.run/ai-service.run.xml deleted file mode 100644 index 854373b..0000000 --- a/ai/.run/ai-service.run.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - true - true - - - - - false - false - - - \ No newline at end of file diff --git a/ai/logs/ai-service.log.2025-10-24.0.gz b/ai/logs/ai-service.log.2025-10-24.0.gz deleted file mode 100644 index 2d96a67..0000000 Binary files a/ai/logs/ai-service.log.2025-10-24.0.gz and /dev/null differ diff --git a/build/reports/problems/problems-report.html b/build/reports/problems/problems-report.html index c86c3c1..1869c93 100644 --- a/build/reports/problems/problems-report.html +++ b/build/reports/problems/problems-report.html @@ -650,7 +650,7 @@ code + .copy-button { diff --git a/deploy/k8s/backend/meeting-service.yaml b/deploy/k8s/backend/meeting-service.yaml index 2ad0472..1fa93e3 100644 --- a/deploy/k8s/backend/meeting-service.yaml +++ b/deploy/k8s/backend/meeting-service.yaml @@ -65,6 +65,10 @@ spec: key: eventhub-connection-string - name: NOTIFICATION_SERVICE_URL value: "http://notification-service:8082" + - name: AI_SERVICE_URL + value: "http://ai-service:8087" + - name: AI_SERVICE_TIMEOUT + value: "60000" resources: requests: cpu: 256m diff --git a/deployment/container/Dockerfile-ai-python b/deployment/container/Dockerfile-ai-python new file mode 100644 index 0000000..ebd2fe8 --- /dev/null +++ b/deployment/container/Dockerfile-ai-python @@ -0,0 +1,53 @@ +# Build stage +FROM python:3.11-slim AS builder + +WORKDIR /app + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + gcc \ + g++ \ + make \ + && rm -rf /var/lib/apt/lists/* + +# Copy requirements and install to /opt/venv +COPY requirements.txt . +RUN python -m venv /opt/venv +ENV PATH="/opt/venv/bin:$PATH" +RUN pip install --no-cache-dir -r requirements.txt + +# Run stage +FROM python:3.11-slim + +ENV USERNAME=k8s +ENV ARTIFACTORY_HOME=/home/${USERNAME} +ENV PYTHONUNBUFFERED=1 +ENV PYTHONDONTWRITEBYTECODE=1 + +# Add a non-root user +RUN adduser --system --group ${USERNAME} && \ + mkdir -p ${ARTIFACTORY_HOME} && \ + chown ${USERNAME}:${USERNAME} ${ARTIFACTORY_HOME} + +WORKDIR ${ARTIFACTORY_HOME} + +# Copy Python virtual environment from builder +COPY --from=builder /opt/venv /opt/venv + +# Copy application code +COPY --chown=${USERNAME}:${USERNAME} . . + +# Update PATH to include venv +ENV PATH="/opt/venv/bin:$PATH" + +USER ${USERNAME} + +# Expose port +EXPOSE 8080 + +# Health check +HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ + CMD python -c "import requests; requests.get('http://localhost:8080/health')" || exit 1 + +# Run the application +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"] diff --git a/deployment/container/Dockerfile-rag b/deployment/container/Dockerfile-rag new file mode 100644 index 0000000..174772c --- /dev/null +++ b/deployment/container/Dockerfile-rag @@ -0,0 +1,59 @@ +# Build stage +FROM python:3.11-slim AS builder + +WORKDIR /app + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + gcc \ + g++ \ + make \ + libpq-dev \ + && rm -rf /var/lib/apt/lists/* + +# Copy requirements and install to /opt/venv +COPY requirements.txt . +RUN python -m venv /opt/venv +ENV PATH="/opt/venv/bin:$PATH" +RUN pip install --no-cache-dir -r requirements.txt + +# Run stage +FROM python:3.11-slim + +ENV USERNAME=k8s +ENV ARTIFACTORY_HOME=/home/${USERNAME} +ENV PYTHONUNBUFFERED=1 +ENV PYTHONDONTWRITEBYTECODE=1 + +# Install runtime dependencies +RUN apt-get update && apt-get install -y \ + libpq5 \ + && rm -rf /var/lib/apt/lists/* + +# Add a non-root user +RUN adduser --system --group ${USERNAME} && \ + mkdir -p ${ARTIFACTORY_HOME} && \ + chown ${USERNAME}:${USERNAME} ${ARTIFACTORY_HOME} + +WORKDIR ${ARTIFACTORY_HOME} + +# Copy Python virtual environment from builder +COPY --from=builder /opt/venv /opt/venv + +# Copy application code +COPY --chown=${USERNAME}:${USERNAME} . . + +# Update PATH to include venv +ENV PATH="/opt/venv/bin:$PATH" + +USER ${USERNAME} + +# Expose port +EXPOSE 8080 + +# Health check +HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ + CMD python -c "import requests; requests.get('http://localhost:8080/health')" || exit 1 + +# Run the application +CMD ["uvicorn", "src.api.main:app", "--host", "0.0.0.0", "--port", "8080"] diff --git a/deployment/jenkins/JENKINS_SETUP.md b/deployment/jenkins/JENKINS_SETUP.md new file mode 100644 index 0000000..da375fc --- /dev/null +++ b/deployment/jenkins/JENKINS_SETUP.md @@ -0,0 +1,256 @@ +# Jenkins Pipeline 설정 가이드 + +## 개요 +GitHub Actions가 막혀 있을 때 Jenkins를 사용하여 HGZero 백엔드 서비스를 빌드하고 배포하는 가이드입니다. + +## 전제 조건 + +### 1. Jenkins 서버 요구사항 +- Jenkins 2.x 이상 +- Docker가 설치되어 있어야 함 +- Kustomize CLI 다운로드 가능한 환경 +- 인터넷 연결 (Docker Hub, Azure Container Registry, GitHub 접근) + +### 2. 필수 Jenkins 플러그인 +다음 플러그인들이 설치되어 있어야 합니다: +- Pipeline (기본 포함) +- Git Plugin +- Docker Pipeline Plugin +- SonarQube Scanner Plugin (선택사항) +- Credentials Plugin (기본 포함) + +## Jenkins 설정 단계 + +### 1단계: Credentials 설정 + +Jenkins 관리 → Manage Credentials → Global credentials에서 다음 credential들을 추가합니다: + +#### 1.1 ACR Credentials +- **ID**: `acr-credentials` +- **Type**: Username with password +- **Username**: Azure Container Registry 사용자명 +- **Password**: Azure Container Registry 비밀번호 +- **Description**: Azure Container Registry Credentials + +#### 1.2 Docker Hub Credentials +- **ID**: `dockerhub-credentials` +- **Type**: Username with password +- **Username**: Docker Hub 사용자명 +- **Password**: Docker Hub 비밀번호 또는 Access Token +- **Description**: Docker Hub Credentials (rate limit 방지용) + +#### 1.3 SonarQube Token (선택사항) +- **ID**: `sonar-token` +- **Type**: Secret text +- **Secret**: SonarQube authentication token +- **Description**: SonarQube Token + +#### 1.4 Git Credentials +- **ID**: `git-credentials` +- **Type**: Username with password +- **Username**: GitHub 사용자명 +- **Password**: GitHub Personal Access Token (repo 권한 필요) +- **Description**: GitHub Credentials for Manifest Repository + +> **중요**: GitHub Personal Access Token 생성 시 다음 권한이 필요합니다: +> - `repo` (Full control of private repositories) + +### 2단계: JDK 21 설정 + +Jenkins 관리 → Global Tool Configuration → JDK에서: +1. "Add JDK" 클릭 +2. **Name**: `JDK21` +3. "Install automatically" 체크 +4. Install from adoptium.net 선택 +5. Version: jdk-21.x.x 선택 + +> **참고**: 또는 Jenkins 서버에 JDK 21이 이미 설치되어 있다면, 설치 경로를 지정할 수 있습니다. + +### 3단계: SonarQube 서버 설정 (선택사항) + +SonarQube 분석을 사용하려면: + +Jenkins 관리 → Configure System → SonarQube servers에서: +1. "Add SonarQube" 클릭 +2. **Name**: `SonarQube` +3. **Server URL**: SonarQube 서버 URL +4. **Server authentication token**: 앞서 생성한 `sonar-token` credential 선택 + +### 4단계: Pipeline Job 생성 + +1. Jenkins 메인 화면에서 "New Item" 클릭 +2. Job 이름 입력 (예: `hgzero-backend-pipeline`) +3. "Pipeline" 선택 +4. "OK" 클릭 + +Pipeline 설정: +1. **General** + - "This project is parameterized" 체크 (자동으로 Jenkinsfile의 parameters가 인식됨) + +2. **Pipeline** + - **Definition**: Pipeline script from SCM + - **SCM**: Git + - **Repository URL**: `https://github.com/hjmoons/HGZero.git` (또는 실제 저장소 URL) + - **Credentials**: 필요시 Git credentials 선택 + - **Branch Specifier**: `*/main` (또는 원하는 브랜치) + - **Script Path**: `Jenkinsfile` + +3. "Save" 클릭 + +## Pipeline 실행 + +### 수동 실행 +1. 생성한 Pipeline Job 선택 +2. "Build with Parameters" 클릭 +3. 파라미터 선택: + - **ENVIRONMENT**: `dev`, `staging`, 또는 `prod` 선택 + - **SKIP_SONARQUBE**: `true` (건너뛰기) 또는 `false` (실행) +4. "Build" 클릭 + +### Pipeline 동작 흐름 + +``` +1. Checkout + └─> Git 저장소에서 코드 체크아웃 + +2. Setup Java + └─> JDK 21 환경 설정 + +3. Load Environment Variables + └─> .github/config/deploy_env_vars_{환경} 파일에서 환경변수 로드 + +4. Build with Gradle + └─> ./gradlew build -x test 실행 (JAR 파일 생성) + +5. SonarQube Analysis (선택사항) + └─> 각 서비스별 테스트 및 코드 품질 분석 + +6. Archive Artifacts + └─> 생성된 JAR 파일을 Jenkins에 보관 + +7. Docker Build & Push + └─> 각 서비스별 Docker 이미지 빌드 및 ACR에 푸시 + +8. Update Manifest Repository + └─> hgzero-manifest 저장소의 Kustomize 파일 업데이트 + └─> ArgoCD가 자동으로 배포 감지 +``` + +## 빌드 결과 확인 + +### 성공 시 +- Console Output에 "✅ Pipeline completed successfully!" 메시지 표시 +- Environment와 Image Tag 정보 출력 +- Manifest 저장소가 업데이트됨 +- ArgoCD가 자동으로 새 이미지를 배포 + +### 실패 시 +- Console Output에 "❌ Pipeline failed!" 메시지 표시 +- 실패한 Stage와 에러 메시지 확인 +- Workspace가 자동으로 정리됨 + +## 환경별 설정 + +### Dev 환경 +```bash +ENVIRONMENT: dev +``` +- 개발 환경에 배포 +- 빠른 반복 개발용 + +### Staging 환경 +```bash +ENVIRONMENT: staging +``` +- 스테이징 환경에 배포 +- 프로덕션 배포 전 최종 검증 + +### Production 환경 +```bash +ENVIRONMENT: prod +``` +- 프로덕션 환경에 배포 +- **주의**: 프로덕션 배포는 신중하게 진행 + +## 트러블슈팅 + +### 문제 1: Gradle 빌드 실패 +**증상**: `./gradlew build` 실패 + +**해결방법**: +- Console Output에서 에러 로그 확인 +- Java 버전이 21인지 확인 +- Gradle wrapper 권한 확인: `chmod +x gradlew` + +### 문제 2: Docker 로그인 실패 +**증상**: Docker login 실패 + +**해결방법**: +- Jenkins Credentials에 ACR credentials가 올바르게 설정되었는지 확인 +- Azure Container Registry URL이 `acrdigitalgarage02.azurecr.io`인지 확인 +- Credential ID가 정확히 `acr-credentials`인지 확인 + +### 문제 3: Git clone 실패 (Manifest Repository) +**증상**: hgzero-manifest 저장소 clone 실패 + +**해결방법**: +- GitHub Personal Access Token이 유효한지 확인 +- Token에 `repo` 권한이 있는지 확인 +- Credential ID가 정확히 `git-credentials`인지 확인 + +### 문제 4: Kustomize 설치 실패 +**증상**: Kustomize 다운로드 실패 + +**해결방법**: +- Jenkins 서버에서 인터넷 연결 확인 +- curl 명령어가 사용 가능한지 확인 +- 필요시 Kustomize를 미리 설치하고 PATH에 추가 + +## 보안 고려사항 + +1. **Credentials 관리** + - 모든 비밀번호와 토큰은 Jenkins Credentials로 관리 + - Pipeline 코드에 절대 하드코딩하지 않음 + +2. **Git Credentials** + - Personal Access Token 사용 (비밀번호 사용 금지) + - 최소 권한 원칙 적용 + +3. **Docker Registry** + - ACR 접근은 Service Principal 또는 관리되는 자격 증명 사용 권장 + +## 추가 참고사항 + +### Webhook 설정 (선택사항) +GitHub push 이벤트 시 자동으로 빌드를 트리거하려면: + +1. Jenkins Job → Configure → Build Triggers +2. "GitHub hook trigger for GITScm polling" 체크 +3. GitHub 저장소 → Settings → Webhooks +4. Jenkins URL 추가: `http://{jenkins-url}/github-webhook/` + +### 알림 설정 (선택사항) +빌드 결과를 이메일이나 Slack으로 받으려면: + +- Email: Email Extension Plugin 설치 및 설정 +- Slack: Slack Notification Plugin 설치 및 설정 + +## 지원 서비스 + +현재 Pipeline에서 빌드하는 서비스: +- `user`: 사용자 관리 서비스 +- `meeting`: 회의 관리 서비스 +- `stt`: 음성-텍스트 변환 서비스 +- `ai`: AI 처리 서비스 +- `notification`: 알림 서비스 + +## 관련 파일 + +- `Jenkinsfile`: Pipeline 정의 파일 +- `.github/config/deploy_env_vars_{환경}`: 환경별 변수 파일 +- `deployment/container/Dockerfile-backend`: 백엔드 Dockerfile +- `hgzero-manifest` 저장소: Kubernetes 매니페스트 파일 + +## 문의 + +Pipeline 관련 문제가 발생하면 Jenkins Console Output을 확인하고, 필요시 DevOps 팀에 문의하세요. diff --git a/meeting/logs/meeting-service.log b/meeting/logs/meeting-service.log index d28169b..9eaa4c4 100644 --- a/meeting/logs/meeting-service.log +++ b/meeting/logs/meeting-service.log @@ -1,12155 +1,11 @@ -2025-10-29 00:00:39 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Upstream connection publisher was completed. Terminating processor.","entityPath":"hgzero-eventhub-name"} -2025-10-29 00:00:39 [SpringApplicationShutdownHook] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_03c1d8_1761662988084","isTransient":false,"isInitiatedByClient":true,"shutdownMessage":"Disposed by client."} -2025-10-29 00:00:39 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is disposed.","entityPath":"hgzero-eventhub-name"} -2025-10-29 00:00:39 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 00:00:39 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@5522f9b] for TypeConfiguration -2025-10-29 00:00:39 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@e812d0e] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@5522f9b] -2025-10-29 00:00:39 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-10-29 00:00:39 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose","connectionId":"MF_03c1d8_1761662988084","errorCondition":null,"errorDescription":null,"sessionName":"hgzero-eventhub-name"} -2025-10-29 00:00:39 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose","connectionId":"MF_03c1d8_1761662988084","errorCondition":null,"errorDescription":null,"sessionName":"cbs-session"} -2025-10-29 00:00:39 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-10-29 05:19:25 [main] INFO c.u.h.meeting.MeetingApplication - Starting MeetingApplication using Java 21.0.8 with PID 46251 (/Users/daewoong/home/workspace/HGZero/meeting/build/classes/java/main started by daewoong in /Users/daewoong/home/workspace/HGZero/meeting) -2025-10-29 05:19:25 [main] DEBUG c.u.h.meeting.MeetingApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 -2025-10-29 05:19:25 [main] INFO c.u.h.meeting.MeetingApplication - The following 1 profile is active: "dev" -2025-10-29 05:19:25 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 05:19:25 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-10-29 05:19:25 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 67 ms. Found 8 JPA repository interfaces. -2025-10-29 05:19:26 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 05:19:26 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2025-10-29 05:19:26 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingAnalysisJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:19:26 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:19:26 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingParticipantJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:19:26 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:19:26 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:19:26 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.SessionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:19:26 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TemplateJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:19:26 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TodoJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:19:26 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 21 ms. Found 0 Redis repository interfaces. -2025-10-29 05:19:26 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8082 (http) -2025-10-29 05:19:26 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-10-29 05:19:26 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] -2025-10-29 05:19:26 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-10-29 05:19:26 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1079 ms -2025-10-29 05:19:26 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-10-29 05:19:26 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@48c3a0ef -2025-10-29 05:19:26 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-10-29 05:19:26 [main] INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:postgresql://4.230.48.72:5432/meetingdb (PostgreSQL 16.2) -2025-10-29 05:19:26 [main] INFO o.f.core.internal.command.DbValidate - Successfully validated 5 migrations (execution time 00:00.040s) -2025-10-29 05:19:27 [main] INFO o.f.core.internal.command.DbMigrate - Current version of schema "public": 4 -2025-10-29 05:19:27 [main] INFO o.f.core.internal.command.DbMigrate - Schema "public" is up to date. No migration necessary. -2025-10-29 05:19:27 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-10-29 05:19:27 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final -2025-10-29 05:19:27 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@1c36ab22 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@1c36ab22 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@1c36ab22 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@68303c3e -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@68303c3e -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@2ec23ec3 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@2ec23ec3 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@7c2e88b9 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@7c2e88b9 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@556843a5 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@556843a5 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@556843a5 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@3c5044fa -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@3c5044fa -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@3c5044fa -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@3db5195 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@3db5195 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@b386a17 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@1cda75be -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@1cda75be -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@2213854b -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@7b1d2f65 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@33bd9ac3 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@33bd9ac3 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@33bd9ac3 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@7c857e8f -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@7c857e8f -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@7c857e8f -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@42028589 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@42028589 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@42028589 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@50f6ecab -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@50f6ecab -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@50f6ecab -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@fc21ff4 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@fc21ff4 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@fc21ff4 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@58647985 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@58647985 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@e1c91cd -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@e1c91cd -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@69e8b711 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@69e8b711 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@69e8b711 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@764a3867 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@d99df7a -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@d99df7a -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@67e1a5fd -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@4b9dc62f -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@4b9dc62f -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@4b9dc62f -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@6cb3463b -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@2f9236d8 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@4536a09a -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@603faaad -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@603faaad -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@16cbba0f -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@16cbba0f -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@28d16af8 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@58932d08 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@45648e75 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@e344f14 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@2d117280 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@6c2be147 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@dddcd91 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@dddcd91 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@21bd6fd1 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@21bd6fd1 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@79e9c14 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@79e9c14 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@340c7479 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@340c7479 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@575e862c -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@575e862c -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@1d57b8f1 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@6e5af973 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@39a2e77d -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@39a2e77d -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@1aee6983 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@3adeca1f -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@3f62d56 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@2d41bb5a -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@2d41bb5a -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@448a6d00 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@848d9bc -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@3a66d97e -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@3a66d97e -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@1add3e03 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@1add3e03 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@d28a235 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@d28a235 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@d28a235 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@43e30f15 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@43e30f15 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@43e30f15 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@4fc2933e -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@3c9c91e3 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@746da54f -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@746da54f -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@2f2d8770 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@2f2d8770 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@2f2d8770 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@742dbac8 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@2ce62e27 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@3538a129 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@3538a129 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@766db6f9 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@766db6f9 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@766db6f9 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@6f8fb906 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@6f8fb906 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@728535c6 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@728535c6 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@244f356 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@244f356 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@19855799 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@19855799 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@bd09a26 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@bd09a26 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@5020b59f -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@75db328e -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@3d99d327 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@3d99d327 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@3a359f7c -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@138b9abe -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@23ffc910 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@35277c6c -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@7a364e1c -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@29a50a11 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@74cff17c -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@7a053795 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@328bc067 -2025-10-29 05:19:27 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer -2025-10-29 05:19:27 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2025-10-29 05:19:27 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@67d55a46) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@72115c48) -2025-10-29 05:19:27 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@1d982fbe) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@3adb4cc8) -2025-10-29 05:19:27 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) -2025-10-29 05:19:27 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@6464f017 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@6464f017 -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@3d99d327` -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 05:19:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 05:19:27 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@1adec8d] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@6eb332d1] -2025-10-29 05:19:27 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2025-10-29 05:19:27 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@1adec8d] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@70bbc163] -2025-10-29 05:19:27 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@70bbc163] for TypeConfiguration -2025-10-29 05:19:27 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 05:19:28 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. -2025-10-29 05:19:28 [main] INFO c.u.h.m.infra.config.RedisConfig - Redis Lettuce Client 설정 완료 - Standalone 모드 (Master-Replica 자동 탐색 비활성화) -2025-10-29 05:19:28 [main] INFO c.u.h.m.infra.config.RedisConfig - LettuceConnectionFactory 설정 완료 - Host: 20.249.177.114:6379, Database: 1 -2025-10-29 05:19:28 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library -2025-10-29 05:19:28 [main] INFO c.u.h.m.infra.config.RedisConfig - RedisTemplate 설정 완료 -2025-10-29 05:19:28 [main] INFO c.u.h.m.infra.cache.CacheConfig - ObjectMapper 설정 완료 -2025-10-29 05:19:28 [main] INFO c.u.h.m.infra.config.EventHubConfig - Initializing Azure EventHub configuration with hub name: hgzero-eventhub-name -2025-10-29 05:19:28 [main] INFO c.u.h.m.infra.config.EventHubConfig - Creating EventHub producer for hub: hgzero-eventhub-name -2025-10-29 05:19:28 [main] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_5063e1_1761682768672"} -2025-10-29 05:19:28 [main] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"} -2025-10-29 05:19:28 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-10-29 05:19:28 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - - -Using generated security password: 4d45b823-293f-4e1d-a53e-97b69aab3981 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2025-10-29 05:19:28 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2025-10-29 05:19:28 [main] INFO c.u.h.m.infra.config.WebSocketConfig - WebSocket 핸들러 등록 완료 - endpoint: /ws/minutes/{minutesId} -2025-10-29 05:19:29 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' -2025-10-29 05:19:29 [main] DEBUG o.s.s.web.DefaultSecurityFilterChain - Will secure any request with filters: DisableEncodeUrlFilter, WebAsyncManagerIntegrationFilter, SecurityContextHolderFilter, HeaderWriterFilter, CorsFilter, LogoutFilter, JwtAuthenticationFilter, RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter, AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, AuthorizationFilter -2025-10-29 05:19:29 [main] WARN o.s.b.a.t.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration - Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false) -2025-10-29 05:19:29 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8082 (http) with context path '/' -2025-10-29 05:19:29 [main] INFO c.u.h.meeting.MeetingApplication - Started MeetingApplication in 4.379 seconds (process running for 4.549) -2025-10-29 05:19:47 [http-nio-8082-exec-2] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-10-29 05:19:47 [http-nio-8082-exec-2] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-10-29 05:19:47 [http-nio-8082-exec-2] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/reserve -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/reserve -2025-10-29 05:19:47 [http-nio-8082-exec-2] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.createMeeting 호출 - 파라미터: [user-005, dohyunjung, dohyun.jung@example.com, com.unicorn.hgzero.meeting.infra.dto.request.CreateMeetingRequest@43513970] -2025-10-29 05:19:47 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MeetingController - 회의 예약 요청 - userId: user-005, title: test 회의 -2025-10-29 05:19:47 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MeetingService - Creating meeting: test 회의 -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* SELECT - COUNT(m) - FROM - MeetingEntity m - WHERE - m.organizerId = :organizerId - AND m.status IN ('SCHEDULED', 'IN_PROGRESS') - AND ( - ( - m.scheduledAt < :endTime - AND m.endTime > :startTime - ) - ) */ select - count(me1_0.meeting_id) - from - meetings me1_0 - where - me1_0.organizer_id=? - and me1_0.status in ('SCHEDULED', 'IN_PROGRESS') - and ( - ( - me1_0.scheduled_at? - ) - ) -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at, - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meetings me1_0 - left join - meeting_participants p1_0 - on me1_0.meeting_id=p1_0.meeting_id - where - me1_0.meeting_id=? -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingEntity */insert - into - meetings (created_at, description, end_time, ended_at, location, organizer_id, purpose, scheduled_at, started_at, status, template_id, title, updated_at, meeting_id) - values - (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.user_id, - mpe1_0.meeting_id - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? - and mpe1_0.user_id=? - fetch - first ? rows only -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.user_id, - mpe1_0.meeting_id - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? - and mpe1_0.user_id=? - fetch - first ? rows only -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - ( - mpe1_0.meeting_id, mpe1_0.user_id - ) in ((?, ?)) -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - ( - mpe1_0.meeting_id, mpe1_0.user_id - ) in ((?, ?)) -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG c.u.h.m.i.gateway.ParticipantGateway - Participants saved: meetingId=752c5d70-6e7d-47a0-9cab-d7d9240dc5a2, count=2 -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Participants saved: meetingId=752c5d70-6e7d-47a0-9cab-d7d9240dc5a2, count=2 -2025-10-29 05:19:47 [http-nio-8082-exec-2] WARN c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 저장 실패 (서비스는 정상 동작) - meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2, 에러: Error in execution -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Meeting cached: meetingId=752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:19:47 [http-nio-8082-exec-2] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Creating and starting connection.","connectionId":"MF_5063e1_1761682768672","hostName":"hgzero-eventhub-ns.servicebus.windows.net","port":5671} -2025-10-29 05:19:47 [http-nio-8082-exec-2] INFO c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Starting reactor.","connectionId":"MF_5063e1_1761682768672"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionInit","connectionId":"MF_5063e1_1761682768672","hostName":"hgzero-eventhub-ns.servicebus.windows.net","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.handler.ReactorHandler - {"az.sdk.message":"reactor.onReactorInit","connectionId":"MF_5063e1_1761682768672"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalOpen","connectionId":"MF_5063e1_1761682768672","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionBound","connectionId":"MF_5063e1_1761682768672","hostName":"hgzero-eventhub-ns.servicebus.windows.net","peerDetails":"hgzero-eventhub-ns.servicebus.windows.net:5671"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteOpen","connectionId":"MF_5063e1_1761682768672","hostName":"hgzero-eventhub-ns.servicebus.windows.net","remoteContainer":"1f5fb5ec1d874531be80a6955cc37ba9_G27"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is now active.","entityPath":"hgzero-eventhub-name"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_5063e1_1761682768672","sessionName":"hgzero-eventhub-name","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Setting CBS channel.","connectionId":"MF_5063e1_1761682768672"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_5063e1_1761682768672","sessionName":"cbs-session","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Emitting new response channel.","connectionId":"MF_5063e1_1761682768672","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Setting next AMQP channel.","connectionId":"MF_5063e1_1761682768672","entityPath":"$cbs"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Next AMQP channel received.","connectionId":"MF_5063e1_1761682768672","entityPath":"$cbs","subscriberId":"un_86c6b5_1761682787716"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_5063e1_1761682768672","linkName":"cbs:sender","entityPath":"$cbs","remoteTarget":"Target{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is now active.","connectionId":"MF_5063e1_1761682768672","entityPath":"$cbs"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_5063e1_1761682768672","entityPath":"$cbs","linkName":"cbs:receiver","remoteSource":"Source{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, distributionMode=null, filter=null, defaultOutcome=null, outcomes=null, capabilities=null}"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Scheduling refresh token task.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-name"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.ReactorSession - {"az.sdk.message":"Creating a new send link.","connectionId":"MF_5063e1_1761682768672","linkName":"hgzero-eventhub-name","sessionName":"hgzero-eventhub-name"} -2025-10-29 05:19:47 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_5063e1_1761682768672","linkName":"hgzero-eventhub-name","entityPath":"hgzero-eventhub-name","remoteTarget":"Target{address='hgzero-eventhub-name', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 05:19:47 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=notification, type=NOTIFICATION_REQUEST, partitionKey=du0928@gmail.com -2025-10-29 05:19:47 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=notification, type=NOTIFICATION_REQUEST, partitionKey=daewoong.jeon@kt.com -2025-10-29 05:19:47 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - 회의 생성 알림 발행 완료 - meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2, participants count: 2 -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Meeting invitation events published: meetingId=752c5d70-6e7d-47a0-9cab-d7d9240dc5a2, participants=2 -2025-10-29 05:19:47 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MeetingService - Meeting created successfully: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingParticipantEntity */insert - into - meeting_participants (attended, created_at, invitation_status, updated_at, meeting_id, user_id) - values - (?, ?, ?, ?, ?, ?) -2025-10-29 05:19:47 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingParticipantEntity */insert - into - meeting_participants (attended, created_at, invitation_status, updated_at, meeting_id, user_id) - values - (?, ?, ?, ?, ?, ?) -2025-10-29 05:19:47 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MeetingController - 회의 예약 완료 - userId: user-005, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:19:47 [http-nio-8082-exec-2] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.createMeeting 완료 - 실행시간: 700ms -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/752c5d70-6e7d-47a0-9cab-d7d9240dc5a2/start -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/752c5d70-6e7d-47a0-9cab-d7d9240dc5a2/start -2025-10-29 05:21:12 [http-nio-8082-exec-5] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.startMeeting 호출 - 파라미터: [752c5d70-6e7d-47a0-9cab-d7d9240dc5a2, user-005, dohyunjung, dohyun.jung@example.com] -2025-10-29 05:21:12 [http-nio-8082-exec-5] INFO c.u.h.m.i.c.MeetingController - 회의 시작 요청 - meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2, userId: user-005 -2025-10-29 05:21:12 [http-nio-8082-exec-5] INFO c.u.h.m.biz.service.MeetingService - Starting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Cache miss for meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:21:12 [http-nio-8082-exec-5] WARN c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 저장 실패 (서비스는 정상 동작) - meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2, 에러: Error in execution -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - select - se1_0.session_id, - se1_0.created_at, - se1_0.ended_at, - se1_0.meeting_id, - se1_0.minutes_id, - se1_0.started_at, - se1_0.started_by, - se1_0.status, - se1_0.updated_at - from - sessions se1_0 - where - se1_0.session_id=? -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Session created: sessionId=ebccc05a-4be8-40cb-9330-49114ebc7205, meetingId=752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Meeting status updated to IN_PROGRESS: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:21:12 [http-nio-8082-exec-5] WARN c.u.h.m.infra.cache.CacheService - 캐시 삭제 실패 - key: meeting:752c5d70-6e7d-47a0-9cab-d7d9240dc5a2, 에러: Error in execution -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Meeting cache evicted: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version, - s1_0.minutes_id, - s1_0.section_id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes me1_0 - left join - minutes_sections s1_0 - on me1_0.minutes_id=s1_0.minutes_id - where - me1_0.minutes_id=? -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Minutes draft created: minutesId=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId=752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:21:12 [http-nio-8082-exec-5] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=meeting, type=MEETING_STARTED, partitionKey=752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - MeetingStarted event published: meetingId=752c5d70-6e7d-47a0-9cab-d7d9240dc5a2, sessionId=ebccc05a-4be8-40cb-9330-49114ebc7205 -2025-10-29 05:21:12 [http-nio-8082-exec-5] INFO c.u.h.m.biz.service.MeetingService - Meeting started successfully: meetingId=752c5d70-6e7d-47a0-9cab-d7d9240dc5a2, sessionId=ebccc05a-4be8-40cb-9330-49114ebc7205, minutesId=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.SessionEntity */insert - into - sessions (created_at, ended_at, meeting_id, minutes_id, started_at, started_by, status, updated_at, session_id) - values - (?, ?, ?, ?, ?, ?, ?, ?, ?) -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */insert - into - minutes (created_at, created_by, finalized_at, finalized_by, meeting_id, status, title, updated_at, version, minutes_id) - values - (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingEntity */update meetings - set - description=?, - end_time=?, - ended_at=?, - location=?, - organizer_id=?, - purpose=?, - scheduled_at=?, - started_at=?, - status=?, - template_id=?, - title=?, - updated_at=? - where - meeting_id=? -2025-10-29 05:21:12 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.SessionEntity */update sessions - set - ended_at=?, - meeting_id=?, - minutes_id=?, - started_at=?, - started_by=?, - status=?, - updated_at=? - where - session_id=? -2025-10-29 05:21:12 [http-nio-8082-exec-5] INFO c.u.h.m.i.c.MeetingController - 회의 시작 완료 - meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2, sessionId: ebccc05a-4be8-40cb-9330-49114ebc7205 -2025-10-29 05:21:12 [http-nio-8082-exec-5] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.startMeeting 완료 - 실행시간: 171ms -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 05:23:44 [http-nio-8082-exec-7] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 05:23:44 [http-nio-8082-exec-7] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:23:44 [http-nio-8082-exec-7] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:23:44 [http-nio-8082-exec-7] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.section_id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.section_id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 05:23:44 [http-nio-8082-exec-7] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 2 -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.section_id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG c.u.h.m.biz.service.TodoService - Getting todos by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:23:44 [http-nio-8082-exec-7] WARN c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 실패 (서비스는 정상 동작) - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, 에러: Error in execution -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 05:23:44 [http-nio-8082-exec-7] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:23:44 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:23:44 [http-nio-8082-exec-7] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:23:44 [http-nio-8082-exec-7] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:23:44 [http-nio-8082-exec-7] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:23:44 [http-nio-8082-exec-7] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:23:44 [http-nio-8082-exec-7] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 266ms -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 05:28:32 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 05:28:32 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:28:32 [http-nio-8082-exec-1] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@48c3a0ef (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 05:28:32 [http-nio-8082-exec-1] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@5a31abe9 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 05:28:32 [http-nio-8082-exec-1] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@20953907 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 05:28:32 [http-nio-8082-exec-1] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@64b1dad8 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 05:28:32 [http-nio-8082-exec-1] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@1736aa37 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 05:28:32 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:28:32 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.section_id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.section_id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 05:28:32 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 3 -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.section_id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.TodoService - Getting todos by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:28:32 [http-nio-8082-exec-1] WARN c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 실패 (서비스는 정상 동작) - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, 에러: Error in execution -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 05:28:32 [http-nio-8082-exec-1] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:28:32 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:28:32 [http-nio-8082-exec-1] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:28:32 [http-nio-8082-exec-1] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:28:32 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:28:32 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:28:32 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 285ms -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 05:31:59 [http-nio-8082-exec-4] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 05:31:59 [http-nio-8082-exec-4] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:31:59 [http-nio-8082-exec-4] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:31:59 [http-nio-8082-exec-4] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.section_id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.section_id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 05:31:59 [http-nio-8082-exec-4] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 4 -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.section_id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.TodoService - Getting todos by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:31:59 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 05:32:00 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:32:00 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:32:00 [http-nio-8082-exec-4] WARN c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 실패 (서비스는 정상 동작) - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, 에러: Error in execution -2025-10-29 05:32:00 [http-nio-8082-exec-4] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:32:00 [http-nio-8082-exec-4] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 05:32:00 [http-nio-8082-exec-4] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:32:00 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:32:00 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:32:00 [http-nio-8082-exec-4] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:32:00 [http-nio-8082-exec-4] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:32:00 [http-nio-8082-exec-4] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:32:00 [http-nio-8082-exec-4] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:32:00 [http-nio-8082-exec-4] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 261ms -2025-10-29 05:37:46 [parallel-2] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Refreshing token.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-name"} -2025-10-29 05:39:11 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Upstream connection publisher was completed. Terminating processor.","entityPath":"hgzero-eventhub-name"} -2025-10-29 05:39:11 [SpringApplicationShutdownHook] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_5063e1_1761682768672","isTransient":false,"isInitiatedByClient":true,"shutdownMessage":"Disposed by client."} -2025-10-29 05:39:11 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is disposed.","entityPath":"hgzero-eventhub-name"} -2025-10-29 05:39:11 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 05:39:11 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose","connectionId":"MF_5063e1_1761682768672","errorCondition":null,"errorDescription":null,"sessionName":"hgzero-eventhub-name"} -2025-10-29 05:39:11 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose","connectionId":"MF_5063e1_1761682768672","errorCondition":null,"errorDescription":null,"sessionName":"cbs-session"} -2025-10-29 05:39:11 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@70bbc163] for TypeConfiguration -2025-10-29 05:39:11 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@7039d21b] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@70bbc163] -2025-10-29 05:39:11 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-10-29 05:39:11 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-10-29 05:39:15 [main] INFO c.u.h.meeting.MeetingApplication - Starting MeetingApplication using Java 21.0.8 with PID 53458 (/Users/daewoong/home/workspace/HGZero/meeting/build/classes/java/main started by daewoong in /Users/daewoong/home/workspace/HGZero/meeting) -2025-10-29 05:39:15 [main] DEBUG c.u.h.meeting.MeetingApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 -2025-10-29 05:39:15 [main] INFO c.u.h.meeting.MeetingApplication - The following 1 profile is active: "dev" -2025-10-29 05:39:15 [main] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'objectMapper' defined in class path resource [com/unicorn/hgzero/meeting/infra/config/JacksonConfig.class]: Cannot register bean definition [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=true; factoryBeanName=jacksonConfig; factoryMethodName=objectMapper; initMethodNames=null; destroyMethodNames=[(inferred)]; defined in class path resource [com/unicorn/hgzero/meeting/infra/config/JacksonConfig.class]] for bean 'objectMapper' since there is already [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=cacheConfig; factoryMethodName=objectMapper; initMethodNames=null; destroyMethodNames=[(inferred)]; defined in class path resource [com/unicorn/hgzero/meeting/infra/cache/CacheConfig.class]] bound. -2025-10-29 05:39:15 [main] INFO o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-10-29 05:39:15 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - - -*************************** -APPLICATION FAILED TO START -*************************** - -Description: - -The bean 'objectMapper', defined in class path resource [com/unicorn/hgzero/meeting/infra/config/JacksonConfig.class], could not be registered. A bean with that name has already been defined in class path resource [com/unicorn/hgzero/meeting/infra/cache/CacheConfig.class] and overriding is disabled. - -Action: - -Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true - -2025-10-29 05:41:54 [main] INFO c.u.h.meeting.MeetingApplication - Starting MeetingApplication using Java 21.0.8 with PID 54482 (/Users/daewoong/home/workspace/HGZero/meeting/build/classes/java/main started by daewoong in /Users/daewoong/home/workspace/HGZero/meeting) -2025-10-29 05:41:54 [main] DEBUG c.u.h.meeting.MeetingApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 -2025-10-29 05:41:54 [main] INFO c.u.h.meeting.MeetingApplication - The following 1 profile is active: "dev" -2025-10-29 05:41:55 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 05:41:55 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-10-29 05:41:55 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 66 ms. Found 8 JPA repository interfaces. -2025-10-29 05:41:55 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 05:41:55 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2025-10-29 05:41:55 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingAnalysisJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:41:55 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:41:55 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingParticipantJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:41:55 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:41:55 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:41:55 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.SessionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:41:55 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TemplateJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:41:55 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TodoJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 05:41:55 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 0 Redis repository interfaces. -2025-10-29 05:41:55 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8082 (http) -2025-10-29 05:41:55 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-10-29 05:41:55 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] -2025-10-29 05:41:55 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-10-29 05:41:55 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1053 ms -2025-10-29 05:41:56 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-10-29 05:41:56 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@50ef2906 -2025-10-29 05:41:56 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-10-29 05:41:56 [main] INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:postgresql://4.230.48.72:5432/meetingdb (PostgreSQL 16.2) -2025-10-29 05:41:56 [main] INFO o.f.core.internal.command.DbValidate - Successfully validated 5 migrations (execution time 00:00.041s) -2025-10-29 05:41:56 [main] INFO o.f.core.internal.command.DbMigrate - Current version of schema "public": 4 -2025-10-29 05:41:56 [main] INFO o.f.core.internal.command.DbMigrate - Schema "public" is up to date. No migration necessary. -2025-10-29 05:41:56 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-10-29 05:41:56 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final -2025-10-29 05:41:56 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@2ce62e27 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@2ce62e27 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@2ce62e27 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@3538a129 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@3538a129 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@766db6f9 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@766db6f9 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@6f8fb906 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@6f8fb906 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@728535c6 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@728535c6 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@728535c6 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@244f356 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@244f356 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@244f356 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@19855799 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@19855799 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@bd09a26 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@5020b59f -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@5020b59f -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@75db328e -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@46d18a33 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@495f3965 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@495f3965 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@495f3965 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@1c06f19c -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@1c06f19c -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@1c06f19c -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@3065efd0 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@3065efd0 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@3065efd0 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@7aaf6bfd -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@7aaf6bfd -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@7aaf6bfd -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@4a8bf1dc -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@4a8bf1dc -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@4a8bf1dc -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@61aa6300 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@61aa6300 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@7e2e0b8a -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@7e2e0b8a -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@7f5f7731 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@7f5f7731 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@7f5f7731 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@6a4f7c17 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@584fb03d -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@584fb03d -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@563392e5 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@52d181ed -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@52d181ed -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@52d181ed -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@43efe064 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@66046e7c -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@2c6a6ce3 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@726a5e6a -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@726a5e6a -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@4e3a6c83 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@4e3a6c83 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@b889cb6 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@74faf450 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@54c37dab -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@49005dc4 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@6a2057e -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@25d9298e -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@6ab826bb -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@6ab826bb -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@219db855 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@219db855 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@3702d0ed -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@3702d0ed -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@5b7b0ada -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@5b7b0ada -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@705d72f0 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@705d72f0 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@3c4e23be -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@1d6a0962 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@1ec4fdcf -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@1ec4fdcf -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@515d615 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@488b46da -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@5e777b0 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@3c74d846 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@3c74d846 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@17fa14a3 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@5552d10 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@3b3190fd -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@3b3190fd -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@219dd935 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@219dd935 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@66859ea9 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@66859ea9 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@66859ea9 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@4a9412c4 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@4a9412c4 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@4a9412c4 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@7d15c513 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@320efff5 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@78b44fcb -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@78b44fcb -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@12dc702b -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@12dc702b -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@12dc702b -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@41b2123e -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@486bcaa -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@5e9671e6 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@5e9671e6 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@2f3a0f37 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@2f3a0f37 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@2f3a0f37 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@7ec8db0c -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@7ec8db0c -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@4f1a5b93 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@4f1a5b93 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@22ee1ad7 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@22ee1ad7 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@5dd2ea0a -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@5dd2ea0a -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@65fa4a07 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@65fa4a07 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@782143e8 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@2a4bd699 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@17063c32 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@17063c32 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@104cf647 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@7488c183 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@37196d53 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@40105b39 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@72a61e61 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@282aea3c -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@54a5799f -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@162e29a1 -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@54b96813 -2025-10-29 05:41:56 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer -2025-10-29 05:41:56 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2025-10-29 05:41:56 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@6cac0334) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@6329a5b9) -2025-10-29 05:41:56 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@6c92a59d) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@4505015b) -2025-10-29 05:41:56 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) -2025-10-29 05:41:56 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@16c1345b -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@16c1345b -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@17063c32` -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 05:41:56 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 05:41:56 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@4f6a5cc9] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@5d24703e] -2025-10-29 05:41:57 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2025-10-29 05:41:57 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@4f6a5cc9] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@2e3c5ecc] -2025-10-29 05:41:57 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@2e3c5ecc] for TypeConfiguration -2025-10-29 05:41:57 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 05:41:57 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. -2025-10-29 05:41:57 [main] INFO c.u.h.m.infra.config.RedisConfig - Redis Lettuce Client 설정 완료 - Standalone 모드 (Master-Replica 자동 탐색 비활성화) -2025-10-29 05:41:57 [main] INFO c.u.h.m.infra.config.RedisConfig - LettuceConnectionFactory 설정 완료 - Host: 20.249.177.114:6379, Database: 1 -2025-10-29 05:41:57 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library -2025-10-29 05:41:57 [main] INFO c.u.h.m.infra.config.RedisConfig - RedisTemplate 설정 완료 -2025-10-29 05:41:57 [main] INFO c.u.h.m.infra.cache.CacheConfig - ObjectMapper 설정 완료 -2025-10-29 05:41:57 [main] INFO c.u.h.m.infra.config.EventHubConfig - Initializing Azure EventHub configuration with hub name: hgzero-eventhub-name -2025-10-29 05:41:57 [main] INFO c.u.h.m.infra.config.EventHubConfig - Creating EventHub producer for hub: hgzero-eventhub-name -2025-10-29 05:41:58 [main] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_809e22_1761684118034"} -2025-10-29 05:41:58 [main] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"} -2025-10-29 05:41:58 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-10-29 05:41:58 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - - -Using generated security password: b3d3d63d-3017-4877-88cb-0fe05b62ac33 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2025-10-29 05:41:58 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2025-10-29 05:41:58 [main] INFO c.u.h.m.infra.config.WebSocketConfig - WebSocket 핸들러 등록 완료 - endpoint: /ws/minutes/{minutesId} -2025-10-29 05:41:58 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' -2025-10-29 05:41:58 [main] DEBUG o.s.s.web.DefaultSecurityFilterChain - Will secure any request with filters: DisableEncodeUrlFilter, WebAsyncManagerIntegrationFilter, SecurityContextHolderFilter, HeaderWriterFilter, CorsFilter, LogoutFilter, JwtAuthenticationFilter, RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter, AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, AuthorizationFilter -2025-10-29 05:41:58 [main] WARN o.s.b.a.t.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration - Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false) -2025-10-29 05:41:58 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8082 (http) with context path '/' -2025-10-29 05:41:58 [main] INFO c.u.h.meeting.MeetingApplication - Started MeetingApplication in 4.318 seconds (process running for 4.484) -2025-10-29 05:42:15 [http-nio-8082-exec-2] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-10-29 05:42:15 [http-nio-8082-exec-2] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-10-29 05:42:15 [http-nio-8082-exec-2] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 05:42:15 [http-nio-8082-exec-2] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 05:42:15 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:42:15 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:42:15 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.section_id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.section_id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 05:42:15 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 5 -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.section_id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.TodoService - Getting todos by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:42:15 [http-nio-8082-exec-2] WARN c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 실패 (서비스는 정상 동작) - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, 에러: Error in execution -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:42:15 [http-nio-8082-exec-2] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 05:42:15 [http-nio-8082-exec-2] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Creating and starting connection.","connectionId":"MF_809e22_1761684118034","hostName":"hgzero-eventhub-ns.servicebus.windows.net","port":5671} -2025-10-29 05:42:15 [http-nio-8082-exec-2] INFO c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Starting reactor.","connectionId":"MF_809e22_1761684118034"} -2025-10-29 05:42:15 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionInit","connectionId":"MF_809e22_1761684118034","hostName":"hgzero-eventhub-ns.servicebus.windows.net","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 05:42:15 [reactor-executor-1] INFO c.a.c.a.i.handler.ReactorHandler - {"az.sdk.message":"reactor.onReactorInit","connectionId":"MF_809e22_1761684118034"} -2025-10-29 05:42:15 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalOpen","connectionId":"MF_809e22_1761684118034","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 05:42:15 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionBound","connectionId":"MF_809e22_1761684118034","hostName":"hgzero-eventhub-ns.servicebus.windows.net","peerDetails":"hgzero-eventhub-ns.servicebus.windows.net:5671"} -2025-10-29 05:42:16 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteOpen","connectionId":"MF_809e22_1761684118034","hostName":"hgzero-eventhub-ns.servicebus.windows.net","remoteContainer":"cf5d7ef5513b497b9b720ac2c9a161bf_G20"} -2025-10-29 05:42:16 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is now active.","entityPath":"hgzero-eventhub-name"} -2025-10-29 05:42:16 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_809e22_1761684118034","sessionName":"hgzero-eventhub-name","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 05:42:16 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Setting CBS channel.","connectionId":"MF_809e22_1761684118034"} -2025-10-29 05:42:16 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_809e22_1761684118034","sessionName":"cbs-session","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 05:42:16 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Emitting new response channel.","connectionId":"MF_809e22_1761684118034","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 05:42:16 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Setting next AMQP channel.","connectionId":"MF_809e22_1761684118034","entityPath":"$cbs"} -2025-10-29 05:42:16 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Next AMQP channel received.","connectionId":"MF_809e22_1761684118034","entityPath":"$cbs","subscriberId":"un_a3b9d6_1761684136085"} -2025-10-29 05:42:16 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_809e22_1761684118034","linkName":"cbs:sender","entityPath":"$cbs","remoteTarget":"Target{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 05:42:16 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is now active.","connectionId":"MF_809e22_1761684118034","entityPath":"$cbs"} -2025-10-29 05:42:16 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_809e22_1761684118034","entityPath":"$cbs","linkName":"cbs:receiver","remoteSource":"Source{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, distributionMode=null, filter=null, defaultOutcome=null, outcomes=null, capabilities=null}"} -2025-10-29 05:42:16 [reactor-executor-1] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Scheduling refresh token task.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-name"} -2025-10-29 05:42:16 [reactor-executor-1] INFO c.a.c.a.i.ReactorSession - {"az.sdk.message":"Creating a new send link.","connectionId":"MF_809e22_1761684118034","linkName":"hgzero-eventhub-name","sessionName":"hgzero-eventhub-name"} -2025-10-29 05:42:16 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_809e22_1761684118034","linkName":"hgzero-eventhub-name","entityPath":"hgzero-eventhub-name","remoteTarget":"Target{address='hgzero-eventhub-name', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 05:42:16 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:42:16 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:42:16 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 05:42:16 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:42:16 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:42:16 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 05:42:16 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 05:42:16 [http-nio-8082-exec-2] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 804ms -2025-10-29 05:45:13 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Upstream connection publisher was completed. Terminating processor.","entityPath":"hgzero-eventhub-name"} -2025-10-29 05:45:13 [SpringApplicationShutdownHook] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_809e22_1761684118034","isTransient":false,"isInitiatedByClient":true,"shutdownMessage":"Disposed by client."} -2025-10-29 05:45:13 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is disposed.","entityPath":"hgzero-eventhub-name"} -2025-10-29 05:45:13 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 05:45:13 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose","connectionId":"MF_809e22_1761684118034","errorCondition":null,"errorDescription":null,"sessionName":"hgzero-eventhub-name"} -2025-10-29 05:45:13 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@2e3c5ecc] for TypeConfiguration -2025-10-29 05:45:13 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose","connectionId":"MF_809e22_1761684118034","errorCondition":null,"errorDescription":null,"sessionName":"cbs-session"} -2025-10-29 05:45:13 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@35c09038] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@2e3c5ecc] -2025-10-29 05:45:13 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-10-29 05:45:13 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-10-29 10:08:22 [main] INFO c.u.h.meeting.MeetingApplication - Starting MeetingApplication using Java 21.0.8 with PID 40456 (/Users/adela/home/workspace/recent/HGZero/meeting/build/classes/java/main started by adela in /Users/adela/home/workspace/recent/HGZero/meeting) -2025-10-29 10:08:22 [main] DEBUG c.u.h.meeting.MeetingApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 -2025-10-29 10:08:22 [main] INFO c.u.h.meeting.MeetingApplication - The following 1 profile is active: "dev" -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 92 ms. Found 9 JPA repository interfaces. -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.AgendaSectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingAnalysisJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingParticipantJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.SessionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TemplateJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TodoJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 10:08:23 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 22 ms. Found 0 Redis repository interfaces. -2025-10-29 10:08:24 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8082 (http) -2025-10-29 10:08:24 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-10-29 10:08:24 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] -2025-10-29 10:08:24 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-10-29 10:08:24 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1460 ms -2025-10-29 10:08:24 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-10-29 10:08:24 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@5d94ac8a -2025-10-29 10:08:24 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-10-29 10:08:24 [main] INFO org.flywaydb.core.FlywayExecutor - Database: jdbc:postgresql://4.230.48.72:5432/meetingdb (PostgreSQL 16.2) -2025-10-29 10:08:25 [main] INFO o.f.core.internal.command.DbValidate - Successfully validated 5 migrations (execution time 00:00.387s) -2025-10-29 10:08:25 [main] INFO o.f.core.internal.command.DbMigrate - Current version of schema "public": 4 -2025-10-29 10:08:25 [main] INFO o.f.core.internal.command.DbMigrate - Schema "public" is up to date. No migration necessary. -2025-10-29 10:08:25 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-10-29 10:08:25 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final -2025-10-29 10:08:25 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@52d181ed -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@52d181ed -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@52d181ed -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@43efe064 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@43efe064 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@66046e7c -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@66046e7c -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@2c6a6ce3 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@2c6a6ce3 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@726a5e6a -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@726a5e6a -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@726a5e6a -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@4e3a6c83 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@4e3a6c83 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@4e3a6c83 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@b889cb6 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@b889cb6 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@74faf450 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@54c37dab -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@54c37dab -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@49005dc4 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@6a2057e -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@25d9298e -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@25d9298e -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@25d9298e -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@6ab826bb -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@6ab826bb -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@6ab826bb -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@219db855 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@219db855 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@219db855 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@3702d0ed -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@3702d0ed -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@3702d0ed -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@5b7b0ada -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@5b7b0ada -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@5b7b0ada -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@705d72f0 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@705d72f0 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@3c4e23be -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@3c4e23be -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@1d6a0962 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@1d6a0962 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@1d6a0962 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@1ec4fdcf -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@515d615 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@515d615 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@488b46da -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@5e777b0 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@5e777b0 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@5e777b0 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@3c74d846 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@17fa14a3 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@5552d10 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@3b3190fd -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@3b3190fd -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@219dd935 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@219dd935 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@66859ea9 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@4a9412c4 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@7d15c513 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@320efff5 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@78b44fcb -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@12dc702b -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@41b2123e -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@41b2123e -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@486bcaa -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@486bcaa -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@5e9671e6 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@5e9671e6 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@2f3a0f37 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@2f3a0f37 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@7ec8db0c -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@7ec8db0c -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@4f1a5b93 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@22ee1ad7 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@5dd2ea0a -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@5dd2ea0a -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@65fa4a07 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@782143e8 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@2a4bd699 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@6003eb60 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@6003eb60 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@571e2f15 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@2552181d -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@51d9fd30 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@51d9fd30 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@2e7e4480 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@2e7e4480 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@8beb0dd -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@8beb0dd -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@8beb0dd -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@3d99d327 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@3d99d327 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@3d99d327 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@233789d9 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@7f31937b -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@2f4fc18 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@2f4fc18 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@7187078a -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@7187078a -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@7187078a -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@6e612122 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@1d38cdde -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@3809f65d -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@3809f65d -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@717b0d81 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@717b0d81 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@717b0d81 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@16745abd -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@16745abd -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@4d793390 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@4d793390 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@3a359f7c -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@3a359f7c -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@138b9abe -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@138b9abe -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@279e8bc0 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@279e8bc0 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@23ffc910 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@35277c6c -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@542beecb -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@542beecb -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@6987b74e -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@22e95960 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@206b959c -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@74026b18 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@1cc81ea1 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@5cf1bbd3 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@204a02a4 -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@4777f71e -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@1b96d447 -2025-10-29 10:08:26 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer -2025-10-29 10:08:26 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [hibernate.temp.use_jdbc_metadata_defaults], use [hibernate.boot.allow_jdbc_metadata_access] instead -2025-10-29 10:08:26 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2025-10-29 10:08:26 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@3e371088) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@8942ece) -2025-10-29 10:08:26 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@3a89226e) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@15254569) -2025-10-29 10:08:26 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) -2025-10-29 10:08:26 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@1952ad9d -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@1952ad9d -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@542beecb` -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 10:08:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 10:08:26 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@60658389] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@3ec98000] -2025-10-29 10:08:26 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 10:08:26 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 10:08:26 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2025-10-29 10:08:26 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@60658389] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@2c9616bb] -2025-10-29 10:08:26 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 10:08:26 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 10:08:26 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@2c9616bb] for TypeConfiguration -2025-10-29 10:08:26 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 10:08:27 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. -2025-10-29 10:08:27 [main] INFO c.u.h.m.infra.config.RedisConfig - Redis Lettuce Client 설정 완료 - Standalone 모드 (Master-Replica 자동 탐색 비활성화) -2025-10-29 10:08:27 [main] INFO c.u.h.m.infra.config.RedisConfig - LettuceConnectionFactory 설정 완료 - Host: 20.249.177.114:6379, Database: 1 -2025-10-29 10:08:27 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library -2025-10-29 10:08:27 [main] INFO c.u.h.m.infra.config.RedisConfig - RedisTemplate 설정 완료 -2025-10-29 10:08:27 [main] INFO c.u.h.m.infra.cache.CacheConfig - ObjectMapper 설정 완료 -2025-10-29 10:08:27 [main] INFO c.u.h.m.infra.config.EventHubConfig - Initializing Azure EventHub configuration with hub name: hgzero-eventhub-name -2025-10-29 10:08:27 [main] INFO c.u.h.m.infra.config.EventHubConfig - Creating EventHub producer for hub: hgzero-eventhub-name -2025-10-29 10:08:27 [main] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_8d75a7_1761700107769"} -2025-10-29 10:08:27 [main] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"} -2025-10-29 10:08:28 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-10-29 10:08:28 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - - -Using generated security password: 5190f26a-375b-4c63-a5b7-e074f5da1de5 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2025-10-29 10:08:28 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2025-10-29 10:08:28 [main] INFO c.u.h.m.infra.config.WebSocketConfig - WebSocket 핸들러 등록 완료 - endpoint: /ws/minutes/{minutesId} -2025-10-29 10:08:28 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' -2025-10-29 10:08:28 [main] DEBUG o.s.s.web.DefaultSecurityFilterChain - Will secure any request with filters: DisableEncodeUrlFilter, WebAsyncManagerIntegrationFilter, SecurityContextHolderFilter, HeaderWriterFilter, CorsFilter, LogoutFilter, JwtAuthenticationFilter, RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter, AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, AuthorizationFilter -2025-10-29 10:08:28 [main] WARN o.s.b.a.t.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration - Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false) -2025-10-29 10:08:28 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8082 (http) with context path '/' -2025-10-29 10:08:28 [main] INFO c.u.h.meeting.MeetingApplication - Started MeetingApplication in 6.511 seconds (process running for 6.838) -2025-10-29 10:08:38 [http-nio-8082-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-10-29 10:08:38 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-10-29 10:08:38 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 11 ms -2025-10-29 10:08:38 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/meeting-inprogress-1/start -2025-10-29 10:08:38 [http-nio-8082-exec-1] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: user-001 (user-001) -2025-10-29 10:08:38 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/meeting-inprogress-1/start -2025-10-29 10:08:38 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.startMeeting 호출 - 파라미터: [meeting-inprogress-1, user-001, user-001, user-001] -2025-10-29 10:08:38 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MeetingController - 회의 시작 요청 - meetingId: meeting-inprogress-1, userId: user-001 -2025-10-29 10:08:38 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MeetingService - Starting meeting: meeting-inprogress-1 -2025-10-29 10:08:38 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Cache miss for meeting: meeting-inprogress-1 -2025-10-29 10:08:38 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 10:08:38 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 10:08:38 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 10:08:38 [http-nio-8082-exec-1] WARN c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 저장 실패 (서비스는 정상 동작) - meetingId: meeting-inprogress-1, 에러: Error in execution -2025-10-29 10:08:38 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - se1_0.session_id, - se1_0.created_at, - se1_0.ended_at, - se1_0.meeting_id, - se1_0.minutes_id, - se1_0.started_at, - se1_0.started_by, - se1_0.status, - se1_0.updated_at - from - sessions se1_0 - where - se1_0.session_id=? -2025-10-29 10:08:38 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Session created: sessionId=a4da7b91-0262-4559-8415-94723f602aeb, meetingId=meeting-inprogress-1 -2025-10-29 10:08:38 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Meeting status updated to IN_PROGRESS: meeting-inprogress-1 -2025-10-29 10:08:38 [http-nio-8082-exec-1] WARN c.u.h.m.infra.cache.CacheService - 캐시 삭제 실패 - key: meeting:meeting-inprogress-1, 에러: Error in execution -2025-10-29 10:08:38 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Meeting cache evicted: meeting-inprogress-1 -2025-10-29 10:08:38 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 10:08:38 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version, - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes me1_0 - left join - minutes_sections s1_0 - on me1_0.minutes_id=s1_0.minutes_id - where - me1_0.minutes_id=? -2025-10-29 10:08:38 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Minutes draft created: minutesId=ff2ec992-b55c-4470-b6dd-8c1355e32b4c, meetingId=meeting-inprogress-1 -2025-10-29 10:08:38 [http-nio-8082-exec-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Creating and starting connection.","connectionId":"MF_8d75a7_1761700107769","hostName":"hgzero-eventhub-ns.servicebus.windows.net","port":5671} -2025-10-29 10:08:38 [http-nio-8082-exec-1] INFO c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Starting reactor.","connectionId":"MF_8d75a7_1761700107769"} -2025-10-29 10:08:38 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionInit","connectionId":"MF_8d75a7_1761700107769","hostName":"hgzero-eventhub-ns.servicebus.windows.net","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 10:08:38 [reactor-executor-1] INFO c.a.c.a.i.handler.ReactorHandler - {"az.sdk.message":"reactor.onReactorInit","connectionId":"MF_8d75a7_1761700107769"} -2025-10-29 10:08:38 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalOpen","connectionId":"MF_8d75a7_1761700107769","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 10:08:38 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionBound","connectionId":"MF_8d75a7_1761700107769","hostName":"hgzero-eventhub-ns.servicebus.windows.net","peerDetails":"hgzero-eventhub-ns.servicebus.windows.net:5671"} -2025-10-29 10:08:39 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteOpen","connectionId":"MF_8d75a7_1761700107769","hostName":"hgzero-eventhub-ns.servicebus.windows.net","remoteContainer":"57e8a42d67c54b00a22b5b1df5737fc1_G6"} -2025-10-29 10:08:39 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is now active.","entityPath":"hgzero-eventhub-name"} -2025-10-29 10:08:39 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_8d75a7_1761700107769","sessionName":"hgzero-eventhub-name","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 10:08:39 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Setting CBS channel.","connectionId":"MF_8d75a7_1761700107769"} -2025-10-29 10:08:39 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_8d75a7_1761700107769","sessionName":"cbs-session","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 10:08:39 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Emitting new response channel.","connectionId":"MF_8d75a7_1761700107769","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 10:08:39 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Setting next AMQP channel.","connectionId":"MF_8d75a7_1761700107769","entityPath":"$cbs"} -2025-10-29 10:08:39 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Next AMQP channel received.","connectionId":"MF_8d75a7_1761700107769","entityPath":"$cbs","subscriberId":"un_530acf_1761700119391"} -2025-10-29 10:08:39 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_8d75a7_1761700107769","linkName":"cbs:sender","entityPath":"$cbs","remoteTarget":"Target{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 10:08:39 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is now active.","connectionId":"MF_8d75a7_1761700107769","entityPath":"$cbs"} -2025-10-29 10:08:39 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_8d75a7_1761700107769","entityPath":"$cbs","linkName":"cbs:receiver","remoteSource":"Source{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, distributionMode=null, filter=null, defaultOutcome=null, outcomes=null, capabilities=null}"} -2025-10-29 10:08:39 [reactor-executor-1] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Scheduling refresh token task.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-name"} -2025-10-29 10:08:39 [reactor-executor-1] INFO c.a.c.a.i.ReactorSession - {"az.sdk.message":"Creating a new send link.","connectionId":"MF_8d75a7_1761700107769","linkName":"hgzero-eventhub-name","sessionName":"hgzero-eventhub-name"} -2025-10-29 10:08:39 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_8d75a7_1761700107769","linkName":"hgzero-eventhub-name","entityPath":"hgzero-eventhub-name","remoteTarget":"Target{address='hgzero-eventhub-name', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 10:08:39 [http-nio-8082-exec-1] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=meeting, type=MEETING_STARTED, partitionKey=meeting-inprogress-1 -2025-10-29 10:08:39 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - MeetingStarted event published: meetingId=meeting-inprogress-1, sessionId=a4da7b91-0262-4559-8415-94723f602aeb -2025-10-29 10:08:39 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MeetingService - Meeting started successfully: meetingId=meeting-inprogress-1, sessionId=a4da7b91-0262-4559-8415-94723f602aeb, minutesId=ff2ec992-b55c-4470-b6dd-8c1355e32b4c -2025-10-29 10:08:39 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.SessionEntity */insert - into - sessions (created_at, ended_at, meeting_id, minutes_id, started_at, started_by, status, updated_at, session_id) - values - (?, ?, ?, ?, ?, ?, ?, ?, ?) -2025-10-29 10:08:39 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */insert - into - minutes (created_at, created_by, finalized_at, finalized_by, meeting_id, status, title, updated_at, version, minutes_id) - values - (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -2025-10-29 10:08:39 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingEntity */update meetings - set - description=?, - end_time=?, - ended_at=?, - location=?, - organizer_id=?, - purpose=?, - scheduled_at=?, - started_at=?, - status=?, - template_id=?, - title=?, - updated_at=? - where - meeting_id=? -2025-10-29 10:08:39 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.SessionEntity */update sessions - set - ended_at=?, - meeting_id=?, - minutes_id=?, - started_at=?, - started_by=?, - status=?, - updated_at=? - where - session_id=? -2025-10-29 10:08:39 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MeetingController - 회의 시작 완료 - meetingId: meeting-inprogress-1, sessionId: a4da7b91-0262-4559-8415-94723f602aeb -2025-10-29 10:08:39 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.startMeeting 완료 - 실행시간: 1464ms -2025-10-29 10:08:50 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Upstream connection publisher was completed. Terminating processor.","entityPath":"hgzero-eventhub-name"} -2025-10-29 10:08:50 [SpringApplicationShutdownHook] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_8d75a7_1761700107769","isTransient":false,"isInitiatedByClient":true,"shutdownMessage":"Disposed by client."} -2025-10-29 10:08:50 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is disposed.","entityPath":"hgzero-eventhub-name"} -2025-10-29 10:08:50 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 10:08:50 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@2c9616bb] for TypeConfiguration -2025-10-29 10:08:50 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@7f0ee032] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@2c9616bb] -2025-10-29 10:08:50 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose","connectionId":"MF_8d75a7_1761700107769","errorCondition":null,"errorDescription":null,"sessionName":"hgzero-eventhub-name"} -2025-10-29 10:08:50 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose","connectionId":"MF_8d75a7_1761700107769","errorCondition":null,"errorDescription":null,"sessionName":"cbs-session"} -2025-10-29 10:08:50 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-10-29 10:08:51 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-10-29 12:19:45 [main] INFO c.u.h.meeting.MeetingApplication - Starting MeetingApplication using Java 21.0.8 with PID 75463 (/Users/daewoong/home/workspace/HGZero/meeting/build/classes/java/main started by daewoong in /Users/daewoong/home/workspace/HGZero/meeting) -2025-10-29 12:19:45 [main] DEBUG c.u.h.meeting.MeetingApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 -2025-10-29 12:19:45 [main] INFO c.u.h.meeting.MeetingApplication - The following 1 profile is active: "dev" -2025-10-29 12:19:45 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 12:19:45 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-10-29 12:19:45 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 75 ms. Found 9 JPA repository interfaces. -2025-10-29 12:19:46 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 12:19:46 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2025-10-29 12:19:46 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.AgendaSectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 12:19:46 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingAnalysisJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 12:19:46 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 12:19:46 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingParticipantJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 12:19:46 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 12:19:46 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 12:19:46 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.SessionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 12:19:46 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TemplateJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 12:19:46 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TodoJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 12:19:46 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 0 Redis repository interfaces. -2025-10-29 12:19:46 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8082 (http) -2025-10-29 12:19:46 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-10-29 12:19:46 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] -2025-10-29 12:19:46 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-10-29 12:19:46 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1044 ms -2025-10-29 12:19:46 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-10-29 12:19:46 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final -2025-10-29 12:19:46 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@3a4cb483 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@3a4cb483 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@3a4cb483 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@4d770bcd -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@4d770bcd -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@fe156f4 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@fe156f4 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@79b4cff -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@79b4cff -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@58ac0823 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@58ac0823 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@58ac0823 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@2d705998 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@2d705998 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@2d705998 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@28a3fc34 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@28a3fc34 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@7582a16b -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@4dd752e8 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@4dd752e8 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@62c46e53 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@55317c63 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@35d81657 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@35d81657 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@35d81657 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@42ef5216 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@42ef5216 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@42ef5216 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@3180aee -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@3180aee -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@3180aee -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@5d94ac8a -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@5d94ac8a -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@5d94ac8a -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@288b73c1 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@288b73c1 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@288b73c1 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@104cfb24 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@104cfb24 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@5340ccb9 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@5340ccb9 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@2bc8caa7 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@2bc8caa7 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@2bc8caa7 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@582ea164 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@2fccf49e -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@2fccf49e -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@7abcc0da -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@174cb0d8 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@174cb0d8 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@174cb0d8 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@3ac406d4 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@72646d16 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@6ec2d990 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@1cfa7ee0 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@1cfa7ee0 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@612290d -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@612290d -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@57cff804 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@2f39b534 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@60fbc34d -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@7736c41e -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@5f911d24 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@3de383f7 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@33ccead -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@33ccead -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@42ebece0 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@42ebece0 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@15c4b1a4 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@15c4b1a4 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@341964d0 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@341964d0 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@51b59d58 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@51b59d58 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@4ca4f762 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@7c5d36c3 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@31de27c -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@31de27c -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@7ebfe01a -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@154b0748 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@35c00c -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@6cd7dc74 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@6cd7dc74 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@6d695ec4 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@20556566 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@e4ef4c0 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@e4ef4c0 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@5ca8bd01 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@5ca8bd01 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@7b10472e -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@7b10472e -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@7b10472e -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@70e5737f -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@70e5737f -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@70e5737f -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@9746157 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@10ad95cd -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@69fd99c1 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@69fd99c1 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@32d8710a -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@32d8710a -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@32d8710a -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@180cc0df -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@64f33dee -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@61c58320 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@61c58320 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@10e4ee33 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@10e4ee33 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@10e4ee33 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@6e90cec8 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@6e90cec8 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@13f182b9 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@13f182b9 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@5ee0cf64 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@5ee0cf64 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@69c227fd -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@69c227fd -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@14c5283 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@14c5283 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@1eb7ec59 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@46748b04 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@64d53f0d -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@64d53f0d -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@69419d59 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@7affee54 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@2337bf27 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@4679554d -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@43719e98 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@49353d43 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@57e57dc5 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@5bba9949 -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@147059f8 -2025-10-29 12:19:46 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer -2025-10-29 12:19:46 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [hibernate.temp.use_jdbc_metadata_defaults], use [hibernate.boot.allow_jdbc_metadata_access] instead -2025-10-29 12:19:46 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2025-10-29 12:19:46 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@42028589) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@50f6ecab) -2025-10-29 12:19:46 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@fc21ff4) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@58647985) -2025-10-29 12:19:46 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) -2025-10-29 12:19:46 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@488b46da -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@488b46da -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@64d53f0d` -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 12:19:46 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 12:19:46 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@104cf647] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@7488c183] -2025-10-29 12:19:47 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 12:19:47 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 12:19:47 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2025-10-29 12:19:47 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@104cf647] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@3fae1ec9] -2025-10-29 12:19:47 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 12:19:47 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 12:19:47 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@3fae1ec9] for TypeConfiguration -2025-10-29 12:19:47 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 12:19:47 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. -2025-10-29 12:19:48 [main] INFO c.u.h.m.infra.config.RedisConfig - Redis Lettuce Client 설정 완료 - Standalone 모드 (Master-Replica 자동 탐색 비활성화) -2025-10-29 12:19:48 [main] INFO c.u.h.m.infra.config.RedisConfig - LettuceConnectionFactory 설정 완료 - Host: 20.249.177.114:6379, Database: 1 -2025-10-29 12:19:48 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library -2025-10-29 12:19:48 [main] INFO c.u.h.m.infra.config.RedisConfig - RedisTemplate 설정 완료 -2025-10-29 12:19:48 [main] INFO c.u.h.m.infra.cache.CacheConfig - ObjectMapper 설정 완료 -2025-10-29 12:19:48 [main] INFO c.u.h.m.infra.config.EventHubConfig - Initializing Azure EventHub configuration with hub name: hgzero-eventhub-name -2025-10-29 12:19:48 [main] INFO c.u.h.m.infra.config.EventHubConfig - Creating EventHub producer for hub: hgzero-eventhub-name -2025-10-29 12:19:48 [main] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_2d1e1b_1761707988244"} -2025-10-29 12:19:48 [main] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"} -2025-10-29 12:19:48 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-10-29 12:19:48 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - - -Using generated security password: 9e1a0807-54ab-4e1b-900e-b08d390a5da0 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2025-10-29 12:19:48 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2025-10-29 12:19:48 [main] INFO c.u.h.m.infra.config.WebSocketConfig - WebSocket 핸들러 등록 완료 - endpoint: /ws/minutes/{minutesId} -2025-10-29 12:19:48 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' -2025-10-29 12:19:48 [main] DEBUG o.s.s.web.DefaultSecurityFilterChain - Will secure any request with filters: DisableEncodeUrlFilter, WebAsyncManagerIntegrationFilter, SecurityContextHolderFilter, HeaderWriterFilter, CorsFilter, LogoutFilter, JwtAuthenticationFilter, RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter, AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, AuthorizationFilter -2025-10-29 12:19:48 [main] WARN o.s.b.a.t.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration - Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false) -2025-10-29 12:19:49 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8082 (http) with context path '/' -2025-10-29 12:19:49 [main] INFO c.u.h.meeting.MeetingApplication - Started MeetingApplication in 3.9 seconds (process running for 4.053) -2025-10-29 12:20:09 [http-nio-8082-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-10-29 12:20:09 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-10-29 12:20:09 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 3 ms -2025-10-29 12:20:09 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 12:20:09 [http-nio-8082-exec-1] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 12:20:09 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 12:20:09 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 12:20:09 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:20:09 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-10-29 12:20:09 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@31b94409 -2025-10-29 12:20:09 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-10-29 12:20:09 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:20:09 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 12:20:10 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 6 -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:20:10 [http-nio-8082-exec-1] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:20:10 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 12:20:11 [http-nio-8082-exec-1] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:20:11 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 12:20:11 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 12:20:11 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, totalCount: 0 -2025-10-29 12:20:11 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:20:11 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:20:11 [http-nio-8082-exec-1] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:20:11 [http-nio-8082-exec-1] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:20:11 [http-nio-8082-exec-1] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 12:20:11 [http-nio-8082-exec-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Creating and starting connection.","connectionId":"MF_2d1e1b_1761707988244","hostName":"hgzero-eventhub-ns.servicebus.windows.net","port":5671} -2025-10-29 12:20:11 [http-nio-8082-exec-1] INFO c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Starting reactor.","connectionId":"MF_2d1e1b_1761707988244"} -2025-10-29 12:20:11 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionInit","connectionId":"MF_2d1e1b_1761707988244","hostName":"hgzero-eventhub-ns.servicebus.windows.net","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 12:20:11 [reactor-executor-1] INFO c.a.c.a.i.handler.ReactorHandler - {"az.sdk.message":"reactor.onReactorInit","connectionId":"MF_2d1e1b_1761707988244"} -2025-10-29 12:20:11 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalOpen","connectionId":"MF_2d1e1b_1761707988244","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 12:20:11 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionBound","connectionId":"MF_2d1e1b_1761707988244","hostName":"hgzero-eventhub-ns.servicebus.windows.net","peerDetails":"hgzero-eventhub-ns.servicebus.windows.net:5671"} -2025-10-29 12:20:12 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteOpen","connectionId":"MF_2d1e1b_1761707988244","hostName":"hgzero-eventhub-ns.servicebus.windows.net","remoteContainer":"c8b77acbeda743169facbf726495551f_G13"} -2025-10-29 12:20:12 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is now active.","entityPath":"hgzero-eventhub-name"} -2025-10-29 12:20:12 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_2d1e1b_1761707988244","sessionName":"hgzero-eventhub-name","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 12:20:12 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Setting CBS channel.","connectionId":"MF_2d1e1b_1761707988244"} -2025-10-29 12:20:12 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_2d1e1b_1761707988244","sessionName":"cbs-session","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 12:20:12 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Emitting new response channel.","connectionId":"MF_2d1e1b_1761707988244","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 12:20:12 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Setting next AMQP channel.","connectionId":"MF_2d1e1b_1761707988244","entityPath":"$cbs"} -2025-10-29 12:20:12 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Next AMQP channel received.","connectionId":"MF_2d1e1b_1761707988244","entityPath":"$cbs","subscriberId":"un_8fab97_1761708012357"} -2025-10-29 12:20:12 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_2d1e1b_1761707988244","linkName":"cbs:sender","entityPath":"$cbs","remoteTarget":"Target{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 12:20:12 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is now active.","connectionId":"MF_2d1e1b_1761707988244","entityPath":"$cbs"} -2025-10-29 12:20:12 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_2d1e1b_1761707988244","entityPath":"$cbs","linkName":"cbs:receiver","remoteSource":"Source{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, distributionMode=null, filter=null, defaultOutcome=null, outcomes=null, capabilities=null}"} -2025-10-29 12:20:12 [reactor-executor-1] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Scheduling refresh token task.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-name"} -2025-10-29 12:20:12 [reactor-executor-1] INFO c.a.c.a.i.ReactorSession - {"az.sdk.message":"Creating a new send link.","connectionId":"MF_2d1e1b_1761707988244","linkName":"hgzero-eventhub-name","sessionName":"hgzero-eventhub-name"} -2025-10-29 12:20:12 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_2d1e1b_1761707988244","linkName":"hgzero-eventhub-name","entityPath":"hgzero-eventhub-name","remoteTarget":"Target{address='hgzero-eventhub-name', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 12:20:12 [http-nio-8082-exec-1] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:20:12 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:20:12 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:20:12 [http-nio-8082-exec-1] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:20:12 [http-nio-8082-exec-1] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:20:12 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:20:12 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:20:12 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 3199ms -2025-10-29 12:21:27 [http-nio-8082-exec-5] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 12:21:27 [http-nio-8082-exec-5] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 12:21:27 [http-nio-8082-exec-5] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 12:21:27 [http-nio-8082-exec-5] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 12:21:27 [http-nio-8082-exec-5] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:21:27 [http-nio-8082-exec-5] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:21:27 [http-nio-8082-exec-5] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 12:21:27 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 12:21:27 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 12:21:28 [http-nio-8082-exec-5] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 7 -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:21:28 [http-nio-8082-exec-5] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 12:21:28 [http-nio-8082-exec-5] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, totalCount: 0 -2025-10-29 12:21:28 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:21:29 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:21:29 [http-nio-8082-exec-5] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:21:29 [http-nio-8082-exec-5] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:21:29 [http-nio-8082-exec-5] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 12:21:29 [http-nio-8082-exec-5] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:21:29 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:21:29 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:21:29 [http-nio-8082-exec-5] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:21:29 [http-nio-8082-exec-5] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:21:29 [http-nio-8082-exec-5] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:21:29 [http-nio-8082-exec-5] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:21:29 [http-nio-8082-exec-5] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 1687ms -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 12:22:55 [http-nio-8082-exec-7] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 12:22:55 [http-nio-8082-exec-7] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:22:55 [http-nio-8082-exec-7] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:22:55 [http-nio-8082-exec-7] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 12:22:55 [http-nio-8082-exec-7] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 8 -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:22:55 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:22:56 [http-nio-8082-exec-7] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 12:22:56 [http-nio-8082-exec-7] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, totalCount: 0 -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 12:22:56 [http-nio-8082-exec-7] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:22:56 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:22:56 [http-nio-8082-exec-7] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:22:56 [http-nio-8082-exec-7] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:22:56 [http-nio-8082-exec-7] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:22:56 [http-nio-8082-exec-7] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:22:56 [http-nio-8082-exec-7] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 1642ms -2025-10-29 12:26:04 [http-nio-8082-exec-2] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 12:26:04 [http-nio-8082-exec-2] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 12:26:04 [http-nio-8082-exec-2] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 12:26:04 [http-nio-8082-exec-2] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 12:26:04 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:26:04 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:26:04 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 12:26:04 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 12:26:04 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 12:26:04 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 12:26:04 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 12:26:04 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:26:04 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 12:26:04 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 9 -2025-10-29 12:26:04 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:26:04 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:26:04 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:26:05 [http-nio-8082-exec-2] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 12:26:05 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, totalCount: 0 -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 12:26:05 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:26:05 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:26:06 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:26:06 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:26:06 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:26:06 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:26:06 [http-nio-8082-exec-2] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 1654ms -2025-10-29 12:30:51 [lettuce-nioEventLoop-6-1] INFO i.l.core.protocol.CommandHandler - null Unexpected exception during request: java.net.SocketException: Connection reset -java.net.SocketException: Connection reset - at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:401) - at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:434) - at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) - at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) - at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:356) - at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) - at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) - at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) - at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 12:30:51 [lettuce-eventExecutorLoop-1-2] INFO i.l.core.protocol.ConnectionWatchdog - Reconnecting, last destination was /20.249.177.114:6379 -2025-10-29 12:30:51 [lettuce-nioEventLoop-6-2] INFO i.l.c.protocol.ReconnectionHandler - Reconnected to 20.249.177.114/:6379 -2025-10-29 12:35:09 [lettuce-nioEventLoop-6-2] INFO i.l.core.protocol.CommandHandler - null Unexpected exception during request: java.net.SocketException: Connection reset -java.net.SocketException: Connection reset - at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:401) - at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:434) - at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) - at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) - at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:356) - at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) - at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) - at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) - at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 12:35:09 [lettuce-eventExecutorLoop-1-3] INFO i.l.core.protocol.ConnectionWatchdog - Reconnecting, last destination was /20.249.177.114:6379 -2025-10-29 12:35:09 [lettuce-nioEventLoop-6-3] INFO i.l.c.protocol.ReconnectionHandler - Reconnected to 20.249.177.114/:6379 -2025-10-29 12:35:51 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 12:35:51 [http-nio-8082-exec-4] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 12:35:51 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 12:35:51 [http-nio-8082-exec-4] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 12:35:51 [http-nio-8082-exec-4] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:35:51 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@31b94409 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 12:35:51 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@49bc2c41 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 12:35:51 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@697bf886 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 12:35:51 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@f4dddf0 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 12:35:51 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@40fcc11 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 12:35:52 [http-nio-8082-exec-4] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:35:52 [http-nio-8082-exec-4] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 12:35:52 [http-nio-8082-exec-4] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 10 -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:35:52 [http-nio-8082-exec-4] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:35:52 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 12:35:53 [http-nio-8082-exec-4] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:35:53 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 12:35:53 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 12:35:53 [http-nio-8082-exec-4] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, totalCount: 0 -2025-10-29 12:35:53 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:35:53 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:35:53 [http-nio-8082-exec-4] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:35:53 [http-nio-8082-exec-4] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:35:53 [http-nio-8082-exec-4] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 12:35:53 [http-nio-8082-exec-4] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:35:53 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:35:53 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:35:53 [http-nio-8082-exec-4] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:35:53 [http-nio-8082-exec-4] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:35:53 [http-nio-8082-exec-4] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:35:53 [http-nio-8082-exec-4] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:35:53 [http-nio-8082-exec-4] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 1838ms -2025-10-29 12:36:22 [http-nio-8082-exec-5] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 12:36:22 [http-nio-8082-exec-5] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 12:36:22 [http-nio-8082-exec-5] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 12:36:22 [http-nio-8082-exec-5] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 12:36:22 [http-nio-8082-exec-5] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:36:22 [http-nio-8082-exec-5] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:36:22 [http-nio-8082-exec-5] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 12:36:22 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 12:36:22 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 12:36:22 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 12:36:22 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 12:36:22 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:36:22 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 12:36:22 [http-nio-8082-exec-5] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 11 -2025-10-29 12:36:22 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:36:22 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:36:22 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 12:36:22 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:36:22 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:36:23 [http-nio-8082-exec-5] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 12:36:23 [http-nio-8082-exec-5] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, totalCount: 0 -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 12:36:23 [http-nio-8082-exec-5] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:36:23 [http-nio-8082-exec-5] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:36:23 [http-nio-8082-exec-5] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:36:23 [http-nio-8082-exec-5] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:36:23 [http-nio-8082-exec-5] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:36:23 [http-nio-8082-exec-5] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:36:23 [http-nio-8082-exec-5] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 1335ms -2025-10-29 12:38:11 [parallel-2] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Refreshing token.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-name"} -2025-10-29 12:40:46 [lettuce-nioEventLoop-6-3] INFO i.l.core.protocol.CommandHandler - null Unexpected exception during request: java.net.SocketException: Connection reset -java.net.SocketException: Connection reset - at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:401) - at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:434) - at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) - at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) - at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:356) - at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) - at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) - at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) - at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 12:40:46 [lettuce-eventExecutorLoop-1-4] INFO i.l.core.protocol.ConnectionWatchdog - Reconnecting, last destination was /20.249.177.114:6379 -2025-10-29 12:40:47 [lettuce-nioEventLoop-6-4] INFO i.l.c.protocol.ReconnectionHandler - Reconnected to 20.249.177.114/:6379 -2025-10-29 12:56:10 [parallel-6] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Refreshing token.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-name"} -2025-10-29 12:58:36 [http-nio-8082-exec-7] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 12:58:36 [http-nio-8082-exec-7] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 12:58:36 [http-nio-8082-exec-7] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 12:58:36 [http-nio-8082-exec-7] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 12:58:36 [http-nio-8082-exec-7] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:58:36 [http-nio-8082-exec-7] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@1af05434 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 12:58:36 [http-nio-8082-exec-7] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@397cc819 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 12:58:36 [http-nio-8082-exec-7] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@59443f06 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 12:58:36 [http-nio-8082-exec-7] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@46ba3c (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 12:58:36 [http-nio-8082-exec-7] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@3699b5b4 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 12:58:36 [http-nio-8082-exec-7] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:58:36 [http-nio-8082-exec-7] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 12:58:36 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 12:58:36 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 12:58:36 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 12:58:36 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 12:58:36 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:58:36 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 12:58:36 [http-nio-8082-exec-7] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 12 -2025-10-29 12:58:36 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:58:37 [http-nio-8082-exec-7] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 12:58:37 [http-nio-8082-exec-7] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, totalCount: 0 -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:58:37 [http-nio-8082-exec-7] WARN c.u.h.m.infra.cache.CacheService - AI 분석 결과 캐시 조회 실패 (새로 생성) - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, 에러: Redis exception -2025-10-29 12:58:37 [http-nio-8082-exec-7] WARN c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 실패 (서비스는 정상 동작) - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, 에러: Redis exception -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:58:37 [http-nio-8082-exec-7] WARN c.u.h.m.infra.cache.CacheService - 패턴 캐시 삭제 실패 - pattern: minutes:list:*user-005*, 에러: Redis exception -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 12:58:37 [http-nio-8082-exec-7] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:58:37 [http-nio-8082-exec-7] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 12:58:37 [lettuce-eventExecutorLoop-1-5] INFO i.l.core.protocol.ConnectionWatchdog - Reconnecting, last destination was /20.249.177.114:6379 -2025-10-29 12:58:38 [http-nio-8082-exec-7] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:58:38 [http-nio-8082-exec-7] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:58:38 [http-nio-8082-exec-7] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 12:58:38 [http-nio-8082-exec-7] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 12:58:38 [http-nio-8082-exec-7] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 1685ms -2025-10-29 12:58:38 [lettuce-nioEventLoop-6-5] INFO i.l.c.protocol.ReconnectionHandler - Reconnected to 20.249.177.114/:6379 -2025-10-29 12:59:59 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Upstream connection publisher was completed. Terminating processor.","entityPath":"hgzero-eventhub-name"} -2025-10-29 12:59:59 [SpringApplicationShutdownHook] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_2d1e1b_1761707988244","isTransient":false,"isInitiatedByClient":true,"shutdownMessage":"Disposed by client."} -2025-10-29 12:59:59 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is disposed.","entityPath":"hgzero-eventhub-name"} -2025-10-29 12:59:59 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 12:59:59 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@3fae1ec9] for TypeConfiguration -2025-10-29 12:59:59 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@5554dd39] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@3fae1ec9] -2025-10-29 12:59:59 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-10-29 12:59:59 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-10-29 13:04:42 [main] INFO c.u.h.meeting.MeetingApplication - Starting MeetingApplication using Java 21.0.8 with PID 92282 (/Users/daewoong/home/workspace/HGZero/meeting/build/classes/java/main started by daewoong in /Users/daewoong/home/workspace/HGZero/meeting) -2025-10-29 13:04:42 [main] DEBUG c.u.h.meeting.MeetingApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 -2025-10-29 13:04:42 [main] INFO c.u.h.meeting.MeetingApplication - The following 1 profile is active: "dev" -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 69 ms. Found 9 JPA repository interfaces. -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.AgendaSectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingAnalysisJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingParticipantJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.SessionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TemplateJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TodoJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:04:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 19 ms. Found 0 Redis repository interfaces. -2025-10-29 13:04:43 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8082 (http) -2025-10-29 13:04:43 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-10-29 13:04:43 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] -2025-10-29 13:04:43 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-10-29 13:04:43 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1066 ms -2025-10-29 13:04:43 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-10-29 13:04:43 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final -2025-10-29 13:04:43 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@53c40ed6 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@53c40ed6 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@53c40ed6 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@3a6b94b6 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@3a6b94b6 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@22ee7fdc -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@22ee7fdc -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@1a88d194 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@1a88d194 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@6949cead -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@6949cead -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@6949cead -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@fe13916 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@fe13916 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@fe13916 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@5ea0a7a9 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@5ea0a7a9 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@278c998 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@25e353dc -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@25e353dc -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@234ce7ff -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@780a91d0 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@3cfab340 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@3cfab340 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@3cfab340 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@3387ab0 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@3387ab0 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@3387ab0 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@470f0637 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@470f0637 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@470f0637 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@6b278b17 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@6b278b17 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@6b278b17 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@2ae5580 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@2ae5580 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@2ae5580 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@4203529f -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@4203529f -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@7d82ca56 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@7d82ca56 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@2aaa89c2 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@2aaa89c2 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@2aaa89c2 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@5a58db42 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@217fd3c -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@217fd3c -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@69ac5752 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@1736273c -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@1736273c -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@1736273c -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@ba86c53 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@36eb8e07 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@3df6494f -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@1b5f960a -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@1b5f960a -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@53ddabc6 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@53ddabc6 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@39ac8c0c -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@361f1647 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@51172948 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@6f2a3b37 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@323b0632 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@7cd8831c -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@146db8a6 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@146db8a6 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@2a20da9f -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@2a20da9f -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@40c0437f -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@40c0437f -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@78b8f818 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@78b8f818 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@1e9d721 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@1e9d721 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@2d3111a1 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@6f2864c3 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@50ef2906 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@50ef2906 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@1f70bce5 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@3ae91ab3 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@16cb6f51 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@3fc5d397 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@3fc5d397 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@25c8c71e -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@57867d96 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@1a7a21d0 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@1a7a21d0 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@bb21063 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@bb21063 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@6821c63c -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@6821c63c -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@6821c63c -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@c2f7c63 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@c2f7c63 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@c2f7c63 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@4790b897 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@5cba890e -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@3a4cb483 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@3a4cb483 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@4d770bcd -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@4d770bcd -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@4d770bcd -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@fe156f4 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@79b4cff -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@58ac0823 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@58ac0823 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@2d705998 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@2d705998 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@2d705998 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@28a3fc34 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@28a3fc34 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@7582a16b -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@7582a16b -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@4dd752e8 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@4dd752e8 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@62c46e53 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@62c46e53 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@55317c63 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@55317c63 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@35d81657 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@42ef5216 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@3205610d -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@3205610d -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@1835b783 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@456b140f -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@1e6bd367 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@2bd7f686 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@3601549f -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@5b2c7186 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@1b9c716f -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@f6bc75c -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@33f2cf82 -2025-10-29 13:04:43 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer -2025-10-29 13:04:43 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [hibernate.temp.use_jdbc_metadata_defaults], use [hibernate.boot.allow_jdbc_metadata_access] instead -2025-10-29 13:04:43 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2025-10-29 13:04:43 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@33563147) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@33239d72) -2025-10-29 13:04:43 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@19c24321) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@ba27ce6) -2025-10-29 13:04:43 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) -2025-10-29 13:04:43 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@448a6d00 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@448a6d00 -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@3205610d` -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 13:04:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 13:04:43 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@23ffc910] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@35277c6c] -2025-10-29 13:04:43 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 13:04:43 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 13:04:44 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2025-10-29 13:04:44 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@23ffc910] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@32ae890] -2025-10-29 13:04:44 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 13:04:44 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 13:04:44 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@32ae890] for TypeConfiguration -2025-10-29 13:04:44 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 13:04:44 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. -2025-10-29 13:04:44 [main] INFO c.u.h.m.infra.config.RedisConfig - Redis Lettuce Client 설정 완료 - Standalone 모드 (Master-Replica 자동 탐색 비활성화) -2025-10-29 13:04:44 [main] INFO c.u.h.m.infra.config.RedisConfig - LettuceConnectionFactory 설정 완료 - Host: 20.249.177.114:6379, Database: 1 -2025-10-29 13:04:44 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library -2025-10-29 13:04:44 [main] INFO c.u.h.m.infra.config.RedisConfig - RedisTemplate 설정 완료 -2025-10-29 13:04:44 [main] INFO c.u.h.m.infra.cache.CacheConfig - ObjectMapper 설정 완료 -2025-10-29 13:04:44 [main] INFO c.u.h.m.infra.config.EventHubConfig - Initializing Azure EventHub configuration with hub name: hgzero-eventhub-name -2025-10-29 13:04:44 [main] INFO c.u.h.m.infra.config.EventHubConfig - Creating EventHub producer for hub: hgzero-eventhub-name -2025-10-29 13:04:44 [main] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_1651b7_1761710684890"} -2025-10-29 13:04:44 [main] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"} -2025-10-29 13:04:45 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-10-29 13:04:45 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - - -Using generated security password: 15d67fea-ad0a-4f00-b8f9-ef1498a1f619 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2025-10-29 13:04:45 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2025-10-29 13:04:45 [main] INFO c.u.h.m.infra.config.WebSocketConfig - WebSocket 핸들러 등록 완료 - endpoint: /ws/minutes/{minutesId} -2025-10-29 13:04:45 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' -2025-10-29 13:04:45 [main] DEBUG o.s.s.web.DefaultSecurityFilterChain - Will secure any request with filters: DisableEncodeUrlFilter, WebAsyncManagerIntegrationFilter, SecurityContextHolderFilter, HeaderWriterFilter, CorsFilter, LogoutFilter, JwtAuthenticationFilter, RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter, AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, AuthorizationFilter -2025-10-29 13:04:45 [main] WARN o.s.b.a.t.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration - Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false) -2025-10-29 13:04:45 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8082 (http) with context path '/' -2025-10-29 13:04:45 [main] INFO c.u.h.meeting.MeetingApplication - Started MeetingApplication in 3.807 seconds (process running for 3.975) -2025-10-29 13:05:04 [http-nio-8082-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-10-29 13:05:04 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-10-29 13:05:04 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms -2025-10-29 13:05:04 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 13:05:04 [http-nio-8082-exec-1] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 13:05:04 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 13:05:04 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 13:05:04 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:05:04 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-10-29 13:05:04 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@3654af2b -2025-10-29 13:05:04 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-10-29 13:05:04 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:05:04 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 13:05:04 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 13:05:04 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 13:05:04 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 13:05:04 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 13:05:04 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:05:04 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 13:05:05 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 13 -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:05:05 [http-nio-8082-exec-1] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 13:05:05 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, totalCount: 0 -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:05:05 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:05:06 [http-nio-8082-exec-1] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:05:06 [http-nio-8082-exec-1] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:05:06 [http-nio-8082-exec-1] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 13:05:06 [http-nio-8082-exec-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Creating and starting connection.","connectionId":"MF_1651b7_1761710684890","hostName":"hgzero-eventhub-ns.servicebus.windows.net","port":5671} -2025-10-29 13:05:06 [http-nio-8082-exec-1] INFO c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Starting reactor.","connectionId":"MF_1651b7_1761710684890"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionInit","connectionId":"MF_1651b7_1761710684890","hostName":"hgzero-eventhub-ns.servicebus.windows.net","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.handler.ReactorHandler - {"az.sdk.message":"reactor.onReactorInit","connectionId":"MF_1651b7_1761710684890"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalOpen","connectionId":"MF_1651b7_1761710684890","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionBound","connectionId":"MF_1651b7_1761710684890","hostName":"hgzero-eventhub-ns.servicebus.windows.net","peerDetails":"hgzero-eventhub-ns.servicebus.windows.net:5671"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteOpen","connectionId":"MF_1651b7_1761710684890","hostName":"hgzero-eventhub-ns.servicebus.windows.net","remoteContainer":"4da57c9778884b9d9360ea1f88afaa3f_G24"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is now active.","entityPath":"hgzero-eventhub-name"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_1651b7_1761710684890","sessionName":"hgzero-eventhub-name","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Setting CBS channel.","connectionId":"MF_1651b7_1761710684890"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_1651b7_1761710684890","sessionName":"cbs-session","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Emitting new response channel.","connectionId":"MF_1651b7_1761710684890","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Setting next AMQP channel.","connectionId":"MF_1651b7_1761710684890","entityPath":"$cbs"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Next AMQP channel received.","connectionId":"MF_1651b7_1761710684890","entityPath":"$cbs","subscriberId":"un_7c5a03_1761710706707"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_1651b7_1761710684890","linkName":"cbs:sender","entityPath":"$cbs","remoteTarget":"Target{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is now active.","connectionId":"MF_1651b7_1761710684890","entityPath":"$cbs"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_1651b7_1761710684890","entityPath":"$cbs","linkName":"cbs:receiver","remoteSource":"Source{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, distributionMode=null, filter=null, defaultOutcome=null, outcomes=null, capabilities=null}"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Scheduling refresh token task.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-name"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.ReactorSession - {"az.sdk.message":"Creating a new send link.","connectionId":"MF_1651b7_1761710684890","linkName":"hgzero-eventhub-name","sessionName":"hgzero-eventhub-name"} -2025-10-29 13:05:06 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_1651b7_1761710684890","linkName":"hgzero-eventhub-name","entityPath":"hgzero-eventhub-name","remoteTarget":"Target{address='hgzero-eventhub-name', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 13:05:06 [http-nio-8082-exec-1] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:05:06 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:05:06 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:05:07 [http-nio-8082-exec-1] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:05:07 [http-nio-8082-exec-1] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:05:07 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:05:07 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:05:07 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 2771ms -2025-10-29 13:10:37 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Upstream connection publisher was completed. Terminating processor.","entityPath":"hgzero-eventhub-name"} -2025-10-29 13:10:37 [SpringApplicationShutdownHook] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_1651b7_1761710684890","isTransient":false,"isInitiatedByClient":true,"shutdownMessage":"Disposed by client."} -2025-10-29 13:10:37 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is disposed.","entityPath":"hgzero-eventhub-name"} -2025-10-29 13:10:37 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 13:10:37 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@32ae890] for TypeConfiguration -2025-10-29 13:10:37 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@793c22c9] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@32ae890] -2025-10-29 13:10:37 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-10-29 13:10:37 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-10-29 13:35:31 [main] INFO c.u.h.meeting.MeetingApplication - Starting MeetingApplication using Java 21.0.8 with PID 6035 (/Users/daewoong/home/workspace/HGZero/meeting/build/classes/java/main started by daewoong in /Users/daewoong/home/workspace/HGZero/meeting) -2025-10-29 13:35:31 [main] DEBUG c.u.h.meeting.MeetingApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 -2025-10-29 13:35:31 [main] INFO c.u.h.meeting.MeetingApplication - The following 1 profile is active: "dev" -2025-10-29 13:35:31 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 13:35:31 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-10-29 13:35:32 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 65 ms. Found 9 JPA repository interfaces. -2025-10-29 13:35:32 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 13:35:32 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2025-10-29 13:35:32 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.AgendaSectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:35:32 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingAnalysisJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:35:32 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:35:32 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingParticipantJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:35:32 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:35:32 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:35:32 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.SessionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:35:32 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TemplateJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:35:32 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TodoJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:35:32 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 19 ms. Found 0 Redis repository interfaces. -2025-10-29 13:35:32 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8082 (http) -2025-10-29 13:35:32 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-10-29 13:35:32 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] -2025-10-29 13:35:32 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-10-29 13:35:32 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1030 ms -2025-10-29 13:35:32 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-10-29 13:35:32 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final -2025-10-29 13:35:32 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@5cba890e -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@5cba890e -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@5cba890e -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@3a4cb483 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@3a4cb483 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@4d770bcd -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@4d770bcd -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@fe156f4 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@fe156f4 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@79b4cff -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@79b4cff -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@79b4cff -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@58ac0823 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@58ac0823 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@58ac0823 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@2d705998 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@2d705998 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@28a3fc34 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@7582a16b -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@7582a16b -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@4dd752e8 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@62c46e53 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@55317c63 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@55317c63 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@55317c63 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@35d81657 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@35d81657 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@35d81657 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@42ef5216 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@42ef5216 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@42ef5216 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@3180aee -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@3180aee -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@3180aee -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@5d94ac8a -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@5d94ac8a -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@5d94ac8a -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@288b73c1 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@288b73c1 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@104cfb24 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@104cfb24 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@5340ccb9 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@5340ccb9 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@5340ccb9 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@2bc8caa7 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@582ea164 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@582ea164 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@2fccf49e -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@7abcc0da -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@7abcc0da -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@7abcc0da -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@174cb0d8 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@3ac406d4 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@72646d16 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@6ec2d990 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@6ec2d990 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@1cfa7ee0 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@1cfa7ee0 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@612290d -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@57cff804 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@2f39b534 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@60fbc34d -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@7736c41e -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@5f911d24 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@3de383f7 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@3de383f7 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@33ccead -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@33ccead -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@42ebece0 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@42ebece0 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@15c4b1a4 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@15c4b1a4 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@341964d0 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@341964d0 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@51b59d58 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@4ca4f762 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@7c5d36c3 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@7c5d36c3 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@31de27c -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@7ebfe01a -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@154b0748 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@35c00c -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@35c00c -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@6cd7dc74 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@6d695ec4 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@20556566 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@20556566 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@e4ef4c0 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@e4ef4c0 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@5ca8bd01 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@5ca8bd01 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@5ca8bd01 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@7b10472e -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@7b10472e -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@7b10472e -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@70e5737f -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@9746157 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@10ad95cd -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@10ad95cd -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@69fd99c1 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@69fd99c1 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@69fd99c1 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@32d8710a -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@180cc0df -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@64f33dee -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@64f33dee -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@61c58320 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@61c58320 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@61c58320 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@10e4ee33 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@10e4ee33 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@6e90cec8 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@6e90cec8 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@13f182b9 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@13f182b9 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@5ee0cf64 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@5ee0cf64 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@69c227fd -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@69c227fd -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@14c5283 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@1eb7ec59 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@1344f7fe -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@1344f7fe -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@5c0ece6d -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@69419d59 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@96075c0 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@2337bf27 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@4679554d -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@43719e98 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@49353d43 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@57e57dc5 -2025-10-29 13:35:32 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@5bba9949 -2025-10-29 13:35:32 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer -2025-10-29 13:35:32 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [hibernate.temp.use_jdbc_metadata_defaults], use [hibernate.boot.allow_jdbc_metadata_access] instead -2025-10-29 13:35:33 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2025-10-29 13:35:33 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@7c857e8f) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@42028589) -2025-10-29 13:35:33 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@50f6ecab) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@fc21ff4) -2025-10-29 13:35:33 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) -2025-10-29 13:35:33 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@515d615 -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@515d615 -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@1344f7fe` -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 13:35:33 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 13:35:33 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@17e8caf2] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@104cf647] -2025-10-29 13:35:33 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 13:35:33 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 13:35:33 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2025-10-29 13:35:33 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@17e8caf2] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@4c2812aa] -2025-10-29 13:35:33 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 13:35:33 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 13:35:33 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@4c2812aa] for TypeConfiguration -2025-10-29 13:35:33 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 13:35:33 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. -2025-10-29 13:35:34 [main] INFO c.u.h.m.infra.config.RedisConfig - Redis Lettuce Client 설정 완료 - Standalone 모드 (Master-Replica 자동 탐색 비활성화) -2025-10-29 13:35:34 [main] INFO c.u.h.m.infra.config.RedisConfig - LettuceConnectionFactory 설정 완료 - Host: 20.249.177.114:6379, Database: 1 -2025-10-29 13:35:34 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library -2025-10-29 13:35:34 [main] INFO c.u.h.m.infra.config.RedisConfig - RedisTemplate 설정 완료 -2025-10-29 13:35:34 [main] INFO c.u.h.m.infra.cache.CacheConfig - ObjectMapper 설정 완료 -2025-10-29 13:35:34 [main] INFO c.u.h.m.infra.config.EventHubConfig - Initializing Azure EventHub configuration with hub name: hgzero-eventhub-test -2025-10-29 13:35:34 [main] INFO c.u.h.m.infra.config.EventHubConfig - Creating EventHub producer for hub: hgzero-eventhub-test -2025-10-29 13:35:34 [main] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_0a8109_1761712534243"} -2025-10-29 13:35:34 [main] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-test"} -2025-10-29 13:35:34 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-10-29 13:35:34 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - - -Using generated security password: 3e224cf7-6899-406a-b709-8233eb964577 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2025-10-29 13:35:34 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2025-10-29 13:35:34 [main] INFO c.u.h.m.infra.config.WebSocketConfig - WebSocket 핸들러 등록 완료 - endpoint: /ws/minutes/{minutesId} -2025-10-29 13:35:34 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' -2025-10-29 13:35:34 [main] DEBUG o.s.s.web.DefaultSecurityFilterChain - Will secure any request with filters: DisableEncodeUrlFilter, WebAsyncManagerIntegrationFilter, SecurityContextHolderFilter, HeaderWriterFilter, CorsFilter, LogoutFilter, JwtAuthenticationFilter, RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter, AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, AuthorizationFilter -2025-10-29 13:35:34 [main] WARN o.s.b.a.t.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration - Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false) -2025-10-29 13:35:35 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8082 (http) with context path '/' -2025-10-29 13:35:35 [main] INFO c.u.h.meeting.MeetingApplication - Started MeetingApplication in 3.756 seconds (process running for 3.91) -2025-10-29 13:35:48 [http-nio-8082-exec-2] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-10-29 13:35:48 [http-nio-8082-exec-2] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-10-29 13:35:48 [http-nio-8082-exec-2] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms -2025-10-29 13:35:48 [http-nio-8082-exec-2] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 13:35:48 [http-nio-8082-exec-2] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 13:35:48 [http-nio-8082-exec-2] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 13:35:48 [http-nio-8082-exec-2] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 13:35:48 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:35:48 [http-nio-8082-exec-2] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-10-29 13:35:48 [http-nio-8082-exec-2] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@7370bf92 -2025-10-29 13:35:48 [http-nio-8082-exec-2] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-10-29 13:35:48 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:35:48 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 13:35:48 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 13:35:48 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 13:35:48 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 13:35:49 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 14 -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:35:49 [http-nio-8082-exec-2] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 13:35:49 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, totalCount: 0 -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:35:49 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:35:50 [http-nio-8082-exec-2] WARN c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 실패 (서비스는 정상 동작) - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, 에러: Error in execution -2025-10-29 13:35:50 [http-nio-8082-exec-2] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:35:50 [http-nio-8082-exec-2] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 13:35:50 [http-nio-8082-exec-2] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Creating and starting connection.","connectionId":"MF_0a8109_1761712534243","hostName":"hgzero-eventhub-ns.servicebus.windows.net","port":5671} -2025-10-29 13:35:50 [http-nio-8082-exec-2] INFO c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Starting reactor.","connectionId":"MF_0a8109_1761712534243"} -2025-10-29 13:35:50 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionInit","connectionId":"MF_0a8109_1761712534243","hostName":"hgzero-eventhub-ns.servicebus.windows.net","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 13:35:50 [reactor-executor-1] INFO c.a.c.a.i.handler.ReactorHandler - {"az.sdk.message":"reactor.onReactorInit","connectionId":"MF_0a8109_1761712534243"} -2025-10-29 13:35:50 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalOpen","connectionId":"MF_0a8109_1761712534243","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 13:35:50 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionBound","connectionId":"MF_0a8109_1761712534243","hostName":"hgzero-eventhub-ns.servicebus.windows.net","peerDetails":"hgzero-eventhub-ns.servicebus.windows.net:5671"} -2025-10-29 13:35:50 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteOpen","connectionId":"MF_0a8109_1761712534243","hostName":"hgzero-eventhub-ns.servicebus.windows.net","remoteContainer":"761f9de1d4ba4d3f9344a591dccc7a01_G31"} -2025-10-29 13:35:50 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is now active.","entityPath":"hgzero-eventhub-test"} -2025-10-29 13:35:51 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_0a8109_1761712534243","sessionName":"hgzero-eventhub-test","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 13:35:51 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Setting CBS channel.","connectionId":"MF_0a8109_1761712534243"} -2025-10-29 13:35:51 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_0a8109_1761712534243","sessionName":"cbs-session","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 13:35:51 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Emitting new response channel.","connectionId":"MF_0a8109_1761712534243","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 13:35:51 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Setting next AMQP channel.","connectionId":"MF_0a8109_1761712534243","entityPath":"$cbs"} -2025-10-29 13:35:51 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Next AMQP channel received.","connectionId":"MF_0a8109_1761712534243","entityPath":"$cbs","subscriberId":"un_53a354_1761712551078"} -2025-10-29 13:35:51 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_0a8109_1761712534243","linkName":"cbs:sender","entityPath":"$cbs","remoteTarget":"Target{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 13:35:51 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is now active.","connectionId":"MF_0a8109_1761712534243","entityPath":"$cbs"} -2025-10-29 13:35:51 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_0a8109_1761712534243","entityPath":"$cbs","linkName":"cbs:receiver","remoteSource":"Source{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, distributionMode=null, filter=null, defaultOutcome=null, outcomes=null, capabilities=null}"} -2025-10-29 13:35:51 [reactor-executor-1] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Scheduling refresh token task.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-test"} -2025-10-29 13:35:51 [reactor-executor-1] INFO c.a.c.a.i.ReactorSession - {"az.sdk.message":"Creating a new send link.","connectionId":"MF_0a8109_1761712534243","linkName":"hgzero-eventhub-test","sessionName":"hgzero-eventhub-test"} -2025-10-29 13:35:51 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_0a8109_1761712534243","linkName":"hgzero-eventhub-test","entityPath":"hgzero-eventhub-test","remoteTarget":"Target{address='hgzero-eventhub-test', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 13:35:51 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:35:51 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:35:51 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:35:51 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:35:51 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:35:51 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:35:51 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:35:51 [http-nio-8082-exec-2] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 3209ms -2025-10-29 13:38:22 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Upstream connection publisher was completed. Terminating processor.","entityPath":"hgzero-eventhub-test"} -2025-10-29 13:38:22 [SpringApplicationShutdownHook] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_0a8109_1761712534243","isTransient":false,"isInitiatedByClient":true,"shutdownMessage":"Disposed by client."} -2025-10-29 13:38:22 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is disposed.","entityPath":"hgzero-eventhub-test"} -2025-10-29 13:38:22 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 13:38:22 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@4c2812aa] for TypeConfiguration -2025-10-29 13:38:22 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@596f35ba] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@4c2812aa] -2025-10-29 13:38:22 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-10-29 13:38:22 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-10-29 13:39:29 [main] INFO c.u.h.meeting.MeetingApplication - Starting MeetingApplication using Java 21.0.8 with PID 7585 (/Users/daewoong/home/workspace/HGZero/meeting/build/classes/java/main started by daewoong in /Users/daewoong/home/workspace/HGZero/meeting) -2025-10-29 13:39:29 [main] DEBUG c.u.h.meeting.MeetingApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 -2025-10-29 13:39:29 [main] INFO c.u.h.meeting.MeetingApplication - The following 1 profile is active: "dev" -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 68 ms. Found 9 JPA repository interfaces. -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.AgendaSectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingAnalysisJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingParticipantJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.SessionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TemplateJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TodoJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 13:39:30 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 19 ms. Found 0 Redis repository interfaces. -2025-10-29 13:39:30 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8082 (http) -2025-10-29 13:39:30 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-10-29 13:39:30 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] -2025-10-29 13:39:30 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-10-29 13:39:30 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1024 ms -2025-10-29 13:39:31 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-10-29 13:39:31 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final -2025-10-29 13:39:31 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@22ee7fdc -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@22ee7fdc -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@22ee7fdc -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@1a88d194 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@1a88d194 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@6949cead -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@6949cead -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@fe13916 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@fe13916 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@5ea0a7a9 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@5ea0a7a9 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@5ea0a7a9 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@278c998 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@278c998 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@278c998 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@25e353dc -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@25e353dc -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@234ce7ff -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@780a91d0 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@780a91d0 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@3cfab340 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@3387ab0 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@470f0637 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@470f0637 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@470f0637 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@6b278b17 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@6b278b17 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@6b278b17 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@2ae5580 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@2ae5580 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@2ae5580 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@4203529f -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@4203529f -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@4203529f -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@7d82ca56 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@7d82ca56 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@7d82ca56 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@2aaa89c2 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@2aaa89c2 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@5a58db42 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@5a58db42 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@217fd3c -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@217fd3c -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@217fd3c -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@69ac5752 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@1736273c -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@1736273c -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@ba86c53 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@36eb8e07 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@36eb8e07 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@36eb8e07 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@3df6494f -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@1b5f960a -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@53ddabc6 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@39ac8c0c -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@39ac8c0c -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@361f1647 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@361f1647 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@51172948 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@6f2a3b37 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@323b0632 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@7cd8831c -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@146db8a6 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@2a20da9f -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@40c0437f -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@40c0437f -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@78b8f818 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@78b8f818 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@1e9d721 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@1e9d721 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@2d3111a1 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@2d3111a1 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@6f2864c3 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@6f2864c3 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@50ef2906 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@1f70bce5 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@3ae91ab3 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@3ae91ab3 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@16cb6f51 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@3fc5d397 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@25c8c71e -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@57867d96 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@57867d96 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@1a7a21d0 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@bb21063 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@6821c63c -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@6821c63c -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@c2f7c63 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@c2f7c63 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@4790b897 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@4790b897 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@4790b897 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@5cba890e -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@5cba890e -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@5cba890e -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@3a4cb483 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@4d770bcd -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@fe156f4 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@fe156f4 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@79b4cff -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@79b4cff -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@79b4cff -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@58ac0823 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@2d705998 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@28a3fc34 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@28a3fc34 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@7582a16b -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@7582a16b -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@7582a16b -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@4dd752e8 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@4dd752e8 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@62c46e53 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@62c46e53 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@55317c63 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@55317c63 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@35d81657 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@35d81657 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@42ef5216 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@42ef5216 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@3180aee -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@5d94ac8a -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@4e789704 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@4e789704 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@2459333a -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@1e6bd367 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@3601549f -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@5b2c7186 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@1b9c716f -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@f6bc75c -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@33f2cf82 -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@bea283b -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@73852720 -2025-10-29 13:39:31 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer -2025-10-29 13:39:31 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [hibernate.temp.use_jdbc_metadata_defaults], use [hibernate.boot.allow_jdbc_metadata_access] instead -2025-10-29 13:39:31 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2025-10-29 13:39:31 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@19c24321) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@ba27ce6) -2025-10-29 13:39:31 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@97cb8dc) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@261b6c8c) -2025-10-29 13:39:31 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) -2025-10-29 13:39:31 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@3a66d97e -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@3a66d97e -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@4e789704` -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 13:39:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 13:39:31 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@7a364e1c] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@29a50a11] -2025-10-29 13:39:31 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 13:39:31 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 13:39:31 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2025-10-29 13:39:31 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@7a364e1c] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@45bb502f] -2025-10-29 13:39:31 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 13:39:31 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 13:39:31 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@45bb502f] for TypeConfiguration -2025-10-29 13:39:31 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 13:39:31 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. -2025-10-29 13:39:32 [main] INFO c.u.h.m.infra.config.RedisConfig - Redis Lettuce Client 설정 완료 - Standalone 모드 (Master-Replica 자동 탐색 비활성화) -2025-10-29 13:39:32 [main] INFO c.u.h.m.infra.config.RedisConfig - LettuceConnectionFactory 설정 완료 - Host: 20.249.177.114:6379, Database: 1 -2025-10-29 13:39:32 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library -2025-10-29 13:39:32 [main] INFO c.u.h.m.infra.config.RedisConfig - RedisTemplate 설정 완료 -2025-10-29 13:39:32 [main] INFO c.u.h.m.infra.cache.CacheConfig - ObjectMapper 설정 완료 -2025-10-29 13:39:32 [main] INFO c.u.h.m.infra.config.EventHubConfig - Initializing Azure EventHub configuration with hub name: hgzero-eventhub-test2 -2025-10-29 13:39:32 [main] INFO c.u.h.m.infra.config.EventHubConfig - Creating EventHub producer for hub: hgzero-eventhub-test2 -2025-10-29 13:39:32 [main] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_77e0ee_1761712772494"} -2025-10-29 13:39:32 [main] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-test2"} -2025-10-29 13:39:32 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-10-29 13:39:32 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - - -Using generated security password: 2cefc772-de4f-4529-831a-fa50d1cb52e0 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2025-10-29 13:39:32 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2025-10-29 13:39:32 [main] INFO c.u.h.m.infra.config.WebSocketConfig - WebSocket 핸들러 등록 완료 - endpoint: /ws/minutes/{minutesId} -2025-10-29 13:39:32 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' -2025-10-29 13:39:33 [main] DEBUG o.s.s.web.DefaultSecurityFilterChain - Will secure any request with filters: DisableEncodeUrlFilter, WebAsyncManagerIntegrationFilter, SecurityContextHolderFilter, HeaderWriterFilter, CorsFilter, LogoutFilter, JwtAuthenticationFilter, RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter, AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, AuthorizationFilter -2025-10-29 13:39:33 [main] WARN o.s.b.a.t.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration - Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false) -2025-10-29 13:39:33 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8082 (http) with context path '/' -2025-10-29 13:39:33 [main] INFO c.u.h.meeting.MeetingApplication - Started MeetingApplication in 3.864 seconds (process running for 4.012) -2025-10-29 13:39:40 [http-nio-8082-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-10-29 13:39:40 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-10-29 13:39:40 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms -2025-10-29 13:39:40 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 13:39:40 [http-nio-8082-exec-1] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 13:39:40 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 13:39:40 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 13:39:40 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:39:40 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-10-29 13:39:41 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@39c5d367 -2025-10-29 13:39:41 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-10-29 13:39:41 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:39:41 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 13:39:41 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 13:39:41 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 13:39:41 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 13:39:41 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 13:39:41 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:39:41 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 13:39:41 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 15 -2025-10-29 13:39:41 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:39:41 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:39:41 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 13:39:41 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:39:41 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:39:41 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:39:41 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:39:41 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:39:42 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:39:42 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:39:42 [http-nio-8082-exec-1] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:39:42 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 13:39:42 [http-nio-8082-exec-1] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:39:42 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 13:39:42 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 13:39:42 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, totalCount: 0 -2025-10-29 13:39:42 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:39:42 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:39:42 [http-nio-8082-exec-1] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:39:42 [http-nio-8082-exec-1] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:39:43 [http-nio-8082-exec-1] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 13:39:43 [http-nio-8082-exec-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Creating and starting connection.","connectionId":"MF_77e0ee_1761712772494","hostName":"hgzero-eventhub-ns.servicebus.windows.net","port":5671} -2025-10-29 13:39:43 [http-nio-8082-exec-1] INFO c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Starting reactor.","connectionId":"MF_77e0ee_1761712772494"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionInit","connectionId":"MF_77e0ee_1761712772494","hostName":"hgzero-eventhub-ns.servicebus.windows.net","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.handler.ReactorHandler - {"az.sdk.message":"reactor.onReactorInit","connectionId":"MF_77e0ee_1761712772494"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalOpen","connectionId":"MF_77e0ee_1761712772494","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionBound","connectionId":"MF_77e0ee_1761712772494","hostName":"hgzero-eventhub-ns.servicebus.windows.net","peerDetails":"hgzero-eventhub-ns.servicebus.windows.net:5671"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteOpen","connectionId":"MF_77e0ee_1761712772494","hostName":"hgzero-eventhub-ns.servicebus.windows.net","remoteContainer":"b8bde50c1e4841fbaaa1042f563b96d9_G7"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is now active.","entityPath":"hgzero-eventhub-test2"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_77e0ee_1761712772494","sessionName":"hgzero-eventhub-test2","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Setting CBS channel.","connectionId":"MF_77e0ee_1761712772494"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_77e0ee_1761712772494","sessionName":"cbs-session","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Emitting new response channel.","connectionId":"MF_77e0ee_1761712772494","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Setting next AMQP channel.","connectionId":"MF_77e0ee_1761712772494","entityPath":"$cbs"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Next AMQP channel received.","connectionId":"MF_77e0ee_1761712772494","entityPath":"$cbs","subscriberId":"un_aab1b9_1761712783477"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_77e0ee_1761712772494","linkName":"cbs:sender","entityPath":"$cbs","remoteTarget":"Target{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is now active.","connectionId":"MF_77e0ee_1761712772494","entityPath":"$cbs"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_77e0ee_1761712772494","entityPath":"$cbs","linkName":"cbs:receiver","remoteSource":"Source{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, distributionMode=null, filter=null, defaultOutcome=null, outcomes=null, capabilities=null}"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Scheduling refresh token task.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-test2"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.ReactorSession - {"az.sdk.message":"Creating a new send link.","connectionId":"MF_77e0ee_1761712772494","linkName":"hgzero-eventhub-test2","sessionName":"hgzero-eventhub-test2"} -2025-10-29 13:39:43 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_77e0ee_1761712772494","linkName":"hgzero-eventhub-test2","entityPath":"hgzero-eventhub-test2","remoteTarget":"Target{address='hgzero-eventhub-test2', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 13:39:43 [http-nio-8082-exec-1] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:39:43 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:39:43 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:39:43 [http-nio-8082-exec-1] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:39:43 [http-nio-8082-exec-1] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:39:43 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:39:43 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:39:43 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 3135ms -2025-10-29 13:44:00 [lettuce-nioEventLoop-6-1] INFO i.l.core.protocol.CommandHandler - null Unexpected exception during request: java.net.SocketException: Connection reset -java.net.SocketException: Connection reset - at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:401) - at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:434) - at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) - at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) - at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:356) - at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) - at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) - at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) - at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 13:44:00 [lettuce-eventExecutorLoop-1-2] INFO i.l.core.protocol.ConnectionWatchdog - Reconnecting, last destination was /20.249.177.114:6379 -2025-10-29 13:44:01 [lettuce-nioEventLoop-6-2] INFO i.l.c.protocol.ReconnectionHandler - Reconnected to 20.249.177.114/:6379 -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 13:46:56 [http-nio-8082-exec-4] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 13:46:56 [http-nio-8082-exec-4] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:46:56 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@39c5d367 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 13:46:56 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@15b16075 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 13:46:56 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@602a6563 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 13:46:56 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@2f20b2d0 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 13:46:56 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@2087b342 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 13:46:56 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@3e2bcdef (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 13:46:56 [http-nio-8082-exec-4] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:46:56 [http-nio-8082-exec-4] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 13:46:56 [http-nio-8082-exec-4] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 16 -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:46:56 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:46:57 [http-nio-8082-exec-4] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:46:57 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 13:46:57 [http-nio-8082-exec-4] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:46:57 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 13:46:57 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 13:46:57 [http-nio-8082-exec-4] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, totalCount: 0 -2025-10-29 13:46:57 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:46:57 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:46:57 [http-nio-8082-exec-4] WARN c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 실패 (서비스는 정상 동작) - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, 에러: Error in execution -2025-10-29 13:46:57 [http-nio-8082-exec-4] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:46:57 [http-nio-8082-exec-4] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 13:46:57 [http-nio-8082-exec-4] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:46:57 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:46:57 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 13:46:57 [http-nio-8082-exec-4] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:46:57 [http-nio-8082-exec-4] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:46:57 [http-nio-8082-exec-4] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 13:46:57 [http-nio-8082-exec-4] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 13:46:57 [http-nio-8082-exec-4] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 1669ms -2025-10-29 13:57:42 [parallel-2] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Refreshing token.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-test2"} -2025-10-29 13:57:42 [reactor-executor-1] ERROR c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Error occurred while refreshing token that is not retriable. Not scheduling refresh task. Use ActiveClientTokenManager.authorize() to schedule task again.","exception":"The messaging entity 'Invalid audience: Namespace cannot be resolved 'amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-test2'' could not be found. To know more visit https://aka.ms/sbResourceMgrExceptions. , errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: $cbs, REFERENCE_ID: cbs:receiver, LINK_CREDIT: 0]","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-test2","audience":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-test2"} -2025-10-29 13:57:42 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteClose","connectionId":"MF_77e0ee_1761712772494","errorCondition":null,"errorDescription":null,"linkName":"hgzero-eventhub-test2","entityPath":"hgzero-eventhub-test2"} -2025-10-29 13:57:42 [reactor-executor-1] INFO c.a.c.a.i.ReactorSession - {"az.sdk.message":"Complete. Removing and disposing send link.","connectionId":"MF_77e0ee_1761712772494","linkName":"hgzero-eventhub-test2"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose","connectionId":"MF_77e0ee_1761712772494","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42","sessionName":"hgzero-eventhub-test2"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose closing a local session.","connectionId":"MF_77e0ee_1761712772494","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42","sessionName":"hgzero-eventhub-test2"} -2025-10-29 14:02:42 [reactor-executor-1] ERROR reactor.core.publisher.Operators - Operator called default onErrorDropped -reactor.core.Exceptions$ErrorCallbackNotImplemented: com.azure.core.amqp.exception.AmqpException: onSessionRemoteClose connectionId[MF_77e0ee_1761712772494], entityName[hgzero-eventhub-test2] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: hgzero-eventhub-test2] -Caused by: com.azure.core.amqp.exception.AmqpException: onSessionRemoteClose connectionId[MF_77e0ee_1761712772494], entityName[hgzero-eventhub-test2] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: hgzero-eventhub-test2] - at com.azure.core.amqp.implementation.ExceptionUtil.toException(ExceptionUtil.java:85) - at com.azure.core.amqp.implementation.handler.SessionHandler.onSessionRemoteClose(SessionHandler.java:136) - at org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:152) - at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:324) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:291) - at com.azure.core.amqp.implementation.ReactorExecutor.run(ReactorExecutor.java:91) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Error occurred. Removing and disposing session","exception":"onSessionRemoteClose connectionId[MF_77e0ee_1761712772494], entityName[hgzero-eventhub-test2] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: hgzero-eventhub-test2]","connectionId":"MF_77e0ee_1761712772494","sessionName":"hgzero-eventhub-test2"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteClose","connectionId":"MF_77e0ee_1761712772494","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42","linkName":"cbs:sender","entityPath":"$cbs"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"Local link state is not closed.","connectionId":"MF_77e0ee_1761712772494","linkName":"cbs:sender","entityPath":"$cbs","state":"ACTIVE"} -2025-10-29 14:02:42 [reactor-executor-1] WARN c.a.c.a.i.RequestResponseChannel - {"az.sdk.message":"Error in SendLinkHandler. Disposing unconfirmed sends.","exception":"The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42, errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: $cbs, REFERENCE_ID: cbs:sender, LINK_CREDIT: 98]","connectionId":"MF_77e0ee_1761712772494","linkName":"cbs"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Transient error occurred. Retrying.","exception":"The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42, errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: $cbs, REFERENCE_ID: cbs:sender, LINK_CREDIT: 98]","connectionId":"MF_77e0ee_1761712772494","entityPath":"$cbs","tryCount":0,"interval_ms":4511} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteClose","connectionId":"MF_77e0ee_1761712772494","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42","linkName":"cbs:receiver","entityPath":"$cbs"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose","connectionId":"MF_77e0ee_1761712772494","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42","sessionName":"cbs-session"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose closing a local session.","connectionId":"MF_77e0ee_1761712772494","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42","sessionName":"cbs-session"} -2025-10-29 14:02:42 [reactor-executor-1] ERROR reactor.core.publisher.Operators - Operator called default onErrorDropped -reactor.core.Exceptions$ErrorCallbackNotImplemented: com.azure.core.amqp.exception.AmqpException: onSessionRemoteClose connectionId[MF_77e0ee_1761712772494], entityName[cbs-session] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: cbs-session] -Caused by: com.azure.core.amqp.exception.AmqpException: onSessionRemoteClose connectionId[MF_77e0ee_1761712772494], entityName[cbs-session] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: cbs-session] - at com.azure.core.amqp.implementation.ExceptionUtil.toException(ExceptionUtil.java:85) - at com.azure.core.amqp.implementation.handler.SessionHandler.onSessionRemoteClose(SessionHandler.java:136) - at org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:152) - at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:324) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:291) - at com.azure.core.amqp.implementation.ReactorExecutor.run(ReactorExecutor.java:91) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Error occurred. Removing and disposing session","exception":"onSessionRemoteClose connectionId[MF_77e0ee_1761712772494], entityName[cbs-session] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: cbs-session]","connectionId":"MF_77e0ee_1761712772494","sessionName":"cbs-session"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteClose","connectionId":"MF_77e0ee_1761712772494","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42","hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onTransportClosed","connectionId":"MF_77e0ee_1761712772494","errorCondition":"n/a","errorDescription":"n/a","hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.TransportHandler - {"az.sdk.message":"onTransportClosed","connectionId":"MF_77e0ee_1761712772494","hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalClose","connectionId":"MF_77e0ee_1761712772494","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionUnbound","connectionId":"MF_77e0ee_1761712772494","hostName":"hgzero-eventhub-ns.servicebus.windows.net","state":"CLOSED","remoteState":"CLOSED"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_77e0ee_1761712772494","isTransient":false,"isInitiatedByClient":false,"shutdownMessage":"Connection handler closed."} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is closed. Requesting upstream.","entityPath":"hgzero-eventhub-test2"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Connection not requested, yet. Requesting one.","entityPath":"hgzero-eventhub-test2"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_df9f22_1761714162840"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-test2"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkFinal","connectionId":"MF_77e0ee_1761712772494","linkName":"hgzero-eventhub-test2","entityPath":"hgzero-eventhub-test2"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionFinal.","connectionId":"MF_77e0ee_1761712772494","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42","sessionName":"hgzero-eventhub-test2"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkFinal","connectionId":"MF_77e0ee_1761712772494","linkName":"cbs:sender","entityPath":"$cbs"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkFinal","connectionId":"MF_77e0ee_1761712772494","linkName":"cbs:receiver","entityPath":"$cbs"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionFinal.","connectionId":"MF_77e0ee_1761712772494","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container 'b8bde50c1e4841fbaaa1042f563b96d9_G7' because it did not have any active links in the past 300000 milliseconds. TrackingId:b8bde50c1e4841fbaaa1042f563b96d9_G7, SystemTracker:gateway5, Timestamp:2025-10-29T05:02:42","sessionName":"cbs-session"} -2025-10-29 14:02:42 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionFinal","connectionId":"MF_77e0ee_1761712772494","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 14:02:47 [parallel-6] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Requesting from upstream.","connectionId":"MF_77e0ee_1761712772494","entityPath":"$cbs","tryCount":0} -2025-10-29 14:02:47 [parallel-6] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Connection not requested, yet. Requesting one.","connectionId":"MF_77e0ee_1761712772494","entityPath":"$cbs"} -2025-10-29 14:02:47 [parallel-6] WARN c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Retry attempts exhausted or exception was not retriable.","exception":"Cannot invoke \"java.util.List.add(Object)\" because \"this._sessions\" is null","connectionId":"MF_77e0ee_1761712772494","entityPath":"$cbs","tryCount":1} -2025-10-29 14:02:47 [parallel-6] ERROR reactor.core.publisher.Operators - Operator called default onErrorDropped -reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.NullPointerException: Cannot invoke "java.util.List.add(Object)" because "this._sessions" is null -Caused by: java.lang.NullPointerException: Cannot invoke "java.util.List.add(Object)" because "this._sessions" is null - at org.apache.qpid.proton.engine.impl.ConnectionImpl.session(ConnectionImpl.java:91) - at org.apache.qpid.proton.engine.impl.ConnectionImpl.session(ConnectionImpl.java:39) - at com.azure.core.amqp.implementation.ReactorConnection.lambda$createSession$13(ReactorConnection.java:282) - at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) - at com.azure.core.amqp.implementation.ReactorConnection.lambda$createSession$14(ReactorConnection.java:279) - at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113) - at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) - at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:137) - at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.request(MonoIgnoreThen.java:164) - at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.request(FluxHide.java:152) - at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.request(MonoPeekTerminal.java:139) - at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171) - at reactor.core.publisher.MonoFlatMap$FlatMapMain.request(MonoFlatMap.java:194) - at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171) - at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171) - at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.request(FluxPeekFuseable.java:144) - at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.request(Operators.java:2331) - at com.azure.core.amqp.implementation.AmqpChannelProcessor.requestUpstream(AmqpChannelProcessor.java:317) - at com.azure.core.amqp.implementation.AmqpChannelProcessor.lambda$onError$4(AmqpChannelProcessor.java:213) - at reactor.core.publisher.LambdaMonoSubscriber.onNext(LambdaMonoSubscriber.java:171) - at reactor.core.publisher.MonoDelay$MonoDelayRunnable.propagateDelay(MonoDelay.java:270) - at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:285) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 14:02:47 [parallel-6] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Error in AMQP channel processor.","connectionId":"MF_77e0ee_1761712772494","entityPath":"$cbs","subscriberId":"un_f842c8_1761714162839"} -2025-10-29 14:07:10 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Upstream connection publisher was completed. Terminating processor.","entityPath":"hgzero-eventhub-test2"} -2025-10-29 14:07:10 [SpringApplicationShutdownHook] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_df9f22_1761714162840","isTransient":false,"isInitiatedByClient":true,"shutdownMessage":"Disposed by client."} -2025-10-29 14:07:10 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is disposed.","entityPath":"hgzero-eventhub-test2"} -2025-10-29 14:07:10 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 14:07:10 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@45bb502f] for TypeConfiguration -2025-10-29 14:07:10 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@31d80bc8] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@45bb502f] -2025-10-29 14:07:10 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-10-29 14:07:10 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-10-29 14:12:18 [main] INFO c.u.h.meeting.MeetingApplication - Starting MeetingApplication using Java 21.0.8 with PID 19994 (/Users/daewoong/home/workspace/HGZero/meeting/build/classes/java/main started by daewoong in /Users/daewoong/home/workspace/HGZero/meeting) -2025-10-29 14:12:18 [main] DEBUG c.u.h.meeting.MeetingApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 -2025-10-29 14:12:18 [main] INFO c.u.h.meeting.MeetingApplication - The following 1 profile is active: "dev" -2025-10-29 14:12:18 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 14:12:18 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-10-29 14:12:18 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 66 ms. Found 9 JPA repository interfaces. -2025-10-29 14:12:19 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 14:12:19 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2025-10-29 14:12:19 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.AgendaSectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 14:12:19 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingAnalysisJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 14:12:19 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 14:12:19 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingParticipantJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 14:12:19 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 14:12:19 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 14:12:19 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.SessionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 14:12:19 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TemplateJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 14:12:19 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TodoJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 14:12:19 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 19 ms. Found 0 Redis repository interfaces. -2025-10-29 14:12:19 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8082 (http) -2025-10-29 14:12:19 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-10-29 14:12:19 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] -2025-10-29 14:12:19 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-10-29 14:12:19 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1024 ms -2025-10-29 14:12:19 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-10-29 14:12:19 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final -2025-10-29 14:12:19 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@3a4cb483 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@3a4cb483 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@3a4cb483 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@4d770bcd -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@4d770bcd -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@fe156f4 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@fe156f4 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@79b4cff -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@79b4cff -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@58ac0823 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@58ac0823 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@58ac0823 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@2d705998 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@2d705998 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@2d705998 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@28a3fc34 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@28a3fc34 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@7582a16b -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@4dd752e8 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@4dd752e8 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@62c46e53 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@55317c63 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@35d81657 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@35d81657 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@35d81657 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@42ef5216 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@42ef5216 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@42ef5216 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@3180aee -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@3180aee -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@3180aee -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@5d94ac8a -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@5d94ac8a -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@5d94ac8a -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@288b73c1 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@288b73c1 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@288b73c1 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@104cfb24 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@104cfb24 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@5340ccb9 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@5340ccb9 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@2bc8caa7 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@2bc8caa7 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@2bc8caa7 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@582ea164 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@2fccf49e -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@2fccf49e -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@7abcc0da -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@174cb0d8 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@174cb0d8 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@174cb0d8 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@3ac406d4 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@72646d16 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@6ec2d990 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@1cfa7ee0 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@1cfa7ee0 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@612290d -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@612290d -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@57cff804 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@2f39b534 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@60fbc34d -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@7736c41e -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@5f911d24 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@3de383f7 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@33ccead -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@33ccead -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@42ebece0 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@42ebece0 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@15c4b1a4 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@15c4b1a4 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@341964d0 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@341964d0 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@51b59d58 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@51b59d58 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@4ca4f762 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@7c5d36c3 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@31de27c -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@31de27c -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@7ebfe01a -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@154b0748 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@35c00c -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@6cd7dc74 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@6cd7dc74 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@6d695ec4 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@20556566 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@e4ef4c0 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@e4ef4c0 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@5ca8bd01 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@5ca8bd01 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@7b10472e -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@7b10472e -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@7b10472e -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@70e5737f -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@70e5737f -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@70e5737f -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@9746157 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@10ad95cd -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@69fd99c1 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@69fd99c1 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@32d8710a -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@32d8710a -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@32d8710a -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@180cc0df -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@64f33dee -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@61c58320 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@61c58320 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@10e4ee33 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@10e4ee33 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@10e4ee33 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@6e90cec8 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@6e90cec8 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@13f182b9 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@13f182b9 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@5ee0cf64 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@5ee0cf64 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@69c227fd -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@69c227fd -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@14c5283 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@14c5283 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@1eb7ec59 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@46748b04 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@64d53f0d -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@64d53f0d -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@69419d59 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@7affee54 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@2337bf27 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@4679554d -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@43719e98 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@49353d43 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@57e57dc5 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@5bba9949 -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@147059f8 -2025-10-29 14:12:19 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer -2025-10-29 14:12:19 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [hibernate.temp.use_jdbc_metadata_defaults], use [hibernate.boot.allow_jdbc_metadata_access] instead -2025-10-29 14:12:19 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2025-10-29 14:12:19 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@42028589) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@50f6ecab) -2025-10-29 14:12:19 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@fc21ff4) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@58647985) -2025-10-29 14:12:19 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) -2025-10-29 14:12:19 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@488b46da -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@488b46da -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@64d53f0d` -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 14:12:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 14:12:19 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@104cf647] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@7488c183] -2025-10-29 14:12:19 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 14:12:19 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 14:12:20 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2025-10-29 14:12:20 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@104cf647] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@5d04adc1] -2025-10-29 14:12:20 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 14:12:20 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 14:12:20 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@5d04adc1] for TypeConfiguration -2025-10-29 14:12:20 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 14:12:20 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. -2025-10-29 14:12:20 [main] INFO c.u.h.m.infra.config.RedisConfig - Redis Lettuce Client 설정 완료 - Standalone 모드 (Master-Replica 자동 탐색 비활성화) -2025-10-29 14:12:20 [main] INFO c.u.h.m.infra.config.RedisConfig - LettuceConnectionFactory 설정 완료 - Host: 20.249.177.114:6379, Database: 1 -2025-10-29 14:12:20 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library -2025-10-29 14:12:20 [main] INFO c.u.h.m.infra.config.RedisConfig - RedisTemplate 설정 완료 -2025-10-29 14:12:20 [main] INFO c.u.h.m.infra.cache.CacheConfig - ObjectMapper 설정 완료 -2025-10-29 14:12:20 [main] INFO c.u.h.m.infra.config.EventHubConfig - Initializing Azure EventHub configuration with hub name: hgzero-eventhub-name -2025-10-29 14:12:20 [main] INFO c.u.h.m.infra.config.EventHubConfig - Creating EventHub producer for hub: hgzero-eventhub-name -2025-10-29 14:12:21 [main] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_1553a4_1761714741022"} -2025-10-29 14:12:21 [main] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"} -2025-10-29 14:12:21 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-10-29 14:12:21 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - - -Using generated security password: 9247447d-8af3-4f0f-bf32-fdfb7bf210a0 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2025-10-29 14:12:21 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2025-10-29 14:12:21 [main] INFO c.u.h.m.infra.config.WebSocketConfig - WebSocket 핸들러 등록 완료 - endpoint: /ws/minutes/{minutesId} -2025-10-29 14:12:21 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' -2025-10-29 14:12:21 [main] DEBUG o.s.s.web.DefaultSecurityFilterChain - Will secure any request with filters: DisableEncodeUrlFilter, WebAsyncManagerIntegrationFilter, SecurityContextHolderFilter, HeaderWriterFilter, CorsFilter, LogoutFilter, JwtAuthenticationFilter, RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter, AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, AuthorizationFilter -2025-10-29 14:12:21 [main] WARN o.s.b.a.t.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration - Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false) -2025-10-29 14:12:21 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8082 (http) with context path '/' -2025-10-29 14:12:21 [main] INFO c.u.h.meeting.MeetingApplication - Started MeetingApplication in 3.722 seconds (process running for 3.872) -2025-10-29 14:12:58 [http-nio-8082-exec-2] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-10-29 14:12:58 [http-nio-8082-exec-2] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-10-29 14:12:58 [http-nio-8082-exec-2] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms -2025-10-29 14:12:58 [http-nio-8082-exec-2] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 14:12:58 [http-nio-8082-exec-2] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 14:12:58 [http-nio-8082-exec-2] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/fe337d6e-df7b-4030-9bbd-5c72c83d9c8a/finalize -2025-10-29 14:12:58 [http-nio-8082-exec-2] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, fe337d6e-df7b-4030-9bbd-5c72c83d9c8a] -2025-10-29 14:12:58 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 14:12:58 [http-nio-8082-exec-2] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-10-29 14:12:58 [http-nio-8082-exec-2] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@6d5073d4 -2025-10-29 14:12:58 [http-nio-8082-exec-2] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-10-29 14:12:58 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 14:12:58 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a by user: user-005 -2025-10-29 14:12:58 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 14:12:58 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 14:12:58 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 14:12:58 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 14:12:58 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 14:12:58 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 14:12:58 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, version: 17 -2025-10-29 14:12:58 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 14:12:58 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 14:12:59 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 14:12:59 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 14:12:59 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 14:12:59 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 14:12:59 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 14:12:59 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 14:12:59 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 14:12:59 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 14:12:59 [http-nio-8082-exec-2] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 14:12:59 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 14:12:59 [http-nio-8082-exec-2] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 42703 -2025-10-29 14:12:59 [http-nio-8082-exec-2] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - ERROR: column ase1_0.decisions does not exist - Position: 118 -2025-10-29 14:12:59 [http-nio-8082-exec-2] ERROR c.u.hgzero.common.aop.LoggingAspect - [Service] com.unicorn.hgzero.meeting.biz.service.AgendaSectionService.getAgendaSectionsByMinutesId 실패 - 실행시간: 164ms, 에러: JDBC exception executing SQL [/* */ select ase1_0.id,ase1_0.agenda_number,ase1_0.agenda_title,ase1_0.ai_summary_short,ase1_0.created_at,ase1_0.decisions,ase1_0.discussions,ase1_0.meeting_id,ase1_0.minutes_id,ase1_0.opinions,ase1_0.pending_items,ase1_0.todos,ase1_0.updated_at from agenda_sections ase1_0 where ase1_0.minutes_id=? order by ase1_0.agenda_number] [ERROR: column ase1_0.decisions does not exist - Position: 118] [n/a]; SQL [n/a] -2025-10-29 14:12:59 [http-nio-8082-exec-2] ERROR c.u.h.m.i.c.MinutesController - 안건 정보 조회 실패 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -org.springframework.dao.InvalidDataAccessResourceUsageException: JDBC exception executing SQL [/* */ select ase1_0.id,ase1_0.agenda_number,ase1_0.agenda_title,ase1_0.ai_summary_short,ase1_0.created_at,ase1_0.decisions,ase1_0.discussions,ase1_0.meeting_id,ase1_0.minutes_id,ase1_0.opinions,ase1_0.pending_items,ase1_0.todos,ase1_0.updated_at from agenda_sections ase1_0 where ase1_0.minutes_id=? order by ase1_0.agenda_number] [ERROR: column ase1_0.decisions does not exist - Position: 118] [n/a]; SQL [n/a] - at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:277) - at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:241) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:550) - at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) - at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:335) - at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:160) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:136) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) - at jdk.proxy2/jdk.proxy2.$Proxy174.findByMinutesIdOrderByAgendaNumber(Unknown Source) - at com.unicorn.hgzero.meeting.biz.service.AgendaSectionService.getAgendaSectionsByMinutesId(AgendaSectionService.java:33) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) - at com.unicorn.hgzero.common.aop.LoggingAspect.logService(LoggingAspect.java:86) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627) - at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) - at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) - at com.unicorn.hgzero.meeting.biz.service.AgendaSectionService$$SpringCGLIB$$0.getAgendaSectionsByMinutesId() - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.buildAgendaInfoList(MinutesController.java:755) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.convertToMinutesDetailResponse(MinutesController.java:620) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes(MinutesController.java:240) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) - at com.unicorn.hgzero.common.aop.LoggingAspect.logController(LoggingAspect.java:56) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627) - at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController$$SpringCGLIB$$0.finalizeMinutes() - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) - at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) - at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340) - at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128) - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at com.unicorn.hgzero.meeting.infra.config.jwt.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.base/java.lang.Thread.run(Thread.java:1583) -Caused by: org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [/* */ select ase1_0.id,ase1_0.agenda_number,ase1_0.agenda_title,ase1_0.ai_summary_short,ase1_0.created_at,ase1_0.decisions,ase1_0.discussions,ase1_0.meeting_id,ase1_0.minutes_id,ase1_0.opinions,ase1_0.pending_items,ase1_0.todos,ase1_0.updated_at from agenda_sections ase1_0 where ase1_0.minutes_id=? order by ase1_0.agenda_number] [ERROR: column ase1_0.decisions does not exist - Position: 118] [n/a] - at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:91) - at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:58) - at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) - at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94) - at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:264) - at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.getResultSet(DeferredResultSetAccess.java:167) - at org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.advanceNext(JdbcValuesResultSetImpl.java:265) - at org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.processNext(JdbcValuesResultSetImpl.java:145) - at org.hibernate.sql.results.jdbc.internal.AbstractJdbcValues.next(AbstractJdbcValues.java:19) - at org.hibernate.sql.results.internal.RowProcessingStateStandardImpl.next(RowProcessingStateStandardImpl.java:67) - at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:204) - at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:33) - at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:211) - at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:83) - at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:76) - at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:65) - at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.lambda$new$2(ConcreteSqmSelectQueryPlan.java:139) - at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:382) - at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:302) - at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:526) - at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:423) - at org.hibernate.query.Query.getResultList(Query.java:120) - at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:129) - at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:92) - at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:152) - at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:140) - at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170) - at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) - at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:169) - at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:148) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:70) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) - at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138) - ... 187 common frames omitted -Caused by: org.postgresql.util.PSQLException: ERROR: column ase1_0.decisions does not exist - Position: 118 - at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733) - at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2420) - at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372) - at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:517) - at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:434) - at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:194) - at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:137) - at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) - at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) - at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:246) - ... 219 common frames omitted -2025-10-29 14:12:59 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 14:12:59 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, totalCount: 0 -2025-10-29 14:12:59 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 14:12:59 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 14:12:59 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 14:12:59 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 14:13:00 [http-nio-8082-exec-2] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 14:13:00 [http-nio-8082-exec-2] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 14:13:00 [http-nio-8082-exec-2] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 14:13:00 [http-nio-8082-exec-2] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Creating and starting connection.","connectionId":"MF_1553a4_1761714741022","hostName":"hgzero-eventhub-ns.servicebus.windows.net","port":5671} -2025-10-29 14:13:00 [http-nio-8082-exec-2] INFO c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Starting reactor.","connectionId":"MF_1553a4_1761714741022"} -2025-10-29 14:13:00 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionInit","connectionId":"MF_1553a4_1761714741022","hostName":"hgzero-eventhub-ns.servicebus.windows.net","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 14:13:00 [reactor-executor-1] INFO c.a.c.a.i.handler.ReactorHandler - {"az.sdk.message":"reactor.onReactorInit","connectionId":"MF_1553a4_1761714741022"} -2025-10-29 14:13:00 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalOpen","connectionId":"MF_1553a4_1761714741022","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 14:13:00 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionBound","connectionId":"MF_1553a4_1761714741022","hostName":"hgzero-eventhub-ns.servicebus.windows.net","peerDetails":"hgzero-eventhub-ns.servicebus.windows.net:5671"} -2025-10-29 14:13:01 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteOpen","connectionId":"MF_1553a4_1761714741022","hostName":"hgzero-eventhub-ns.servicebus.windows.net","remoteContainer":"7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0"} -2025-10-29 14:13:01 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is now active.","entityPath":"hgzero-eventhub-name"} -2025-10-29 14:13:01 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_1553a4_1761714741022","sessionName":"hgzero-eventhub-name","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 14:13:01 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Setting CBS channel.","connectionId":"MF_1553a4_1761714741022"} -2025-10-29 14:13:01 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_1553a4_1761714741022","sessionName":"cbs-session","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 14:13:01 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Emitting new response channel.","connectionId":"MF_1553a4_1761714741022","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 14:13:01 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Setting next AMQP channel.","connectionId":"MF_1553a4_1761714741022","entityPath":"$cbs"} -2025-10-29 14:13:01 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Next AMQP channel received.","connectionId":"MF_1553a4_1761714741022","entityPath":"$cbs","subscriberId":"un_947bbe_1761714781126"} -2025-10-29 14:13:01 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_1553a4_1761714741022","linkName":"cbs:sender","entityPath":"$cbs","remoteTarget":"Target{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 14:13:01 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is now active.","connectionId":"MF_1553a4_1761714741022","entityPath":"$cbs"} -2025-10-29 14:13:01 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_1553a4_1761714741022","entityPath":"$cbs","linkName":"cbs:receiver","remoteSource":"Source{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, distributionMode=null, filter=null, defaultOutcome=null, outcomes=null, capabilities=null}"} -2025-10-29 14:13:01 [reactor-executor-1] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Scheduling refresh token task.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-name"} -2025-10-29 14:13:01 [reactor-executor-1] INFO c.a.c.a.i.ReactorSession - {"az.sdk.message":"Creating a new send link.","connectionId":"MF_1553a4_1761714741022","linkName":"hgzero-eventhub-name","sessionName":"hgzero-eventhub-name"} -2025-10-29 14:13:01 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_1553a4_1761714741022","linkName":"hgzero-eventhub-name","entityPath":"hgzero-eventhub-name","remoteTarget":"Target{address='hgzero-eventhub-name', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 14:13:01 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 14:13:01 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 14:13:01 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 14:13:01 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 14:13:01 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 14:13:01 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a, meetingId: 752c5d70-6e7d-47a0-9cab-d7d9240dc5a2 -2025-10-29 14:13:01 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: fe337d6e-df7b-4030-9bbd-5c72c83d9c8a -2025-10-29 14:13:01 [http-nio-8082-exec-2] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 3496ms -2025-10-29 14:17:18 [lettuce-nioEventLoop-6-1] INFO i.l.core.protocol.CommandHandler - null Unexpected exception during request: java.net.SocketException: Connection reset -java.net.SocketException: Connection reset - at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:401) - at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:434) - at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) - at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) - at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:356) - at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) - at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) - at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) - at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 14:17:18 [lettuce-eventExecutorLoop-1-2] INFO i.l.core.protocol.ConnectionWatchdog - Reconnecting, last destination was /20.249.177.114:6379 -2025-10-29 14:17:18 [lettuce-nioEventLoop-6-2] INFO i.l.c.protocol.ReconnectionHandler - Reconnected to 20.249.177.114/:6379 -2025-10-29 14:21:40 [lettuce-nioEventLoop-6-2] INFO i.l.core.protocol.CommandHandler - null Unexpected exception during request: java.net.SocketException: Connection reset -java.net.SocketException: Connection reset - at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:401) - at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:434) - at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) - at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) - at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:356) - at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) - at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) - at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) - at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 14:21:40 [lettuce-eventExecutorLoop-1-3] INFO i.l.core.protocol.ConnectionWatchdog - Reconnecting, last destination was /20.249.177.114:6379 -2025-10-29 14:21:40 [lettuce-nioEventLoop-6-3] INFO i.l.c.protocol.ReconnectionHandler - Reconnected to 20.249.177.114/:6379 -2025-10-29 14:26:00 [lettuce-nioEventLoop-6-3] INFO i.l.core.protocol.CommandHandler - null Unexpected exception during request: java.net.SocketException: Connection reset -java.net.SocketException: Connection reset - at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:401) - at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:434) - at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) - at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) - at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:356) - at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) - at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) - at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) - at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 14:26:00 [lettuce-eventExecutorLoop-1-4] INFO i.l.core.protocol.ConnectionWatchdog - Reconnecting, last destination was /20.249.177.114:6379 -2025-10-29 14:26:01 [lettuce-nioEventLoop-6-4] INFO i.l.c.protocol.ReconnectionHandler - Reconnected to 20.249.177.114/:6379 -2025-10-29 14:31:00 [parallel-2] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Refreshing token.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-name"} -2025-10-29 14:43:01 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteClose","connectionId":"MF_1553a4_1761714741022","errorCondition":"amqp:link:detach-forced","errorDescription":"Idle link tracker, link hgzero-eventhub-name has been idle for 1800000ms TrackingId:d4937cb3-cbee-4b91-9d4c-047577777f8a_G0, SystemTracker:hgzero-eventhub-ns:EventHub:hgzero-eventhub-name, Timestamp:2025-10-29T05:43:01","linkName":"hgzero-eventhub-name","entityPath":"hgzero-eventhub-name"} -2025-10-29 14:43:01 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"Local link state is not closed.","connectionId":"MF_1553a4_1761714741022","linkName":"hgzero-eventhub-name","entityPath":"hgzero-eventhub-name","state":"ACTIVE"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose","connectionId":"MF_1553a4_1761714741022","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01","sessionName":"hgzero-eventhub-name"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose closing a local session.","connectionId":"MF_1553a4_1761714741022","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01","sessionName":"hgzero-eventhub-name"} -2025-10-29 14:48:02 [reactor-executor-1] ERROR reactor.core.publisher.Operators - Operator called default onErrorDropped -reactor.core.Exceptions$ErrorCallbackNotImplemented: com.azure.core.amqp.exception.AmqpException: onSessionRemoteClose connectionId[MF_1553a4_1761714741022], entityName[hgzero-eventhub-name] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: hgzero-eventhub-name] -Caused by: com.azure.core.amqp.exception.AmqpException: onSessionRemoteClose connectionId[MF_1553a4_1761714741022], entityName[hgzero-eventhub-name] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: hgzero-eventhub-name] - at com.azure.core.amqp.implementation.ExceptionUtil.toException(ExceptionUtil.java:85) - at com.azure.core.amqp.implementation.handler.SessionHandler.onSessionRemoteClose(SessionHandler.java:136) - at org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:152) - at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:324) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:291) - at com.azure.core.amqp.implementation.ReactorExecutor.run(ReactorExecutor.java:91) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Error occurred. Removing and disposing session","exception":"onSessionRemoteClose connectionId[MF_1553a4_1761714741022], entityName[hgzero-eventhub-name] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: hgzero-eventhub-name]","connectionId":"MF_1553a4_1761714741022","sessionName":"hgzero-eventhub-name"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteClose","connectionId":"MF_1553a4_1761714741022","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01","linkName":"cbs:sender","entityPath":"$cbs"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"Local link state is not closed.","connectionId":"MF_1553a4_1761714741022","linkName":"cbs:sender","entityPath":"$cbs","state":"ACTIVE"} -2025-10-29 14:48:02 [reactor-executor-1] WARN c.a.c.a.i.RequestResponseChannel - {"az.sdk.message":"Error in SendLinkHandler. Disposing unconfirmed sends.","exception":"The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01, errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: $cbs, REFERENCE_ID: cbs:sender, LINK_CREDIT: 98]","connectionId":"MF_1553a4_1761714741022","linkName":"cbs"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Transient error occurred. Retrying.","exception":"The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01, errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: $cbs, REFERENCE_ID: cbs:sender, LINK_CREDIT: 98]","connectionId":"MF_1553a4_1761714741022","entityPath":"$cbs","tryCount":0,"interval_ms":4511} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteClose","connectionId":"MF_1553a4_1761714741022","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01","linkName":"cbs:receiver","entityPath":"$cbs"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"Local link state is not closed.","connectionId":"MF_1553a4_1761714741022","linkName":"cbs:receiver","entityPath":"$cbs","state":"ACTIVE"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose","connectionId":"MF_1553a4_1761714741022","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01","sessionName":"cbs-session"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose closing a local session.","connectionId":"MF_1553a4_1761714741022","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01","sessionName":"cbs-session"} -2025-10-29 14:48:02 [reactor-executor-1] ERROR reactor.core.publisher.Operators - Operator called default onErrorDropped -reactor.core.Exceptions$ErrorCallbackNotImplemented: com.azure.core.amqp.exception.AmqpException: onSessionRemoteClose connectionId[MF_1553a4_1761714741022], entityName[cbs-session] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: cbs-session] -Caused by: com.azure.core.amqp.exception.AmqpException: onSessionRemoteClose connectionId[MF_1553a4_1761714741022], entityName[cbs-session] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: cbs-session] - at com.azure.core.amqp.implementation.ExceptionUtil.toException(ExceptionUtil.java:85) - at com.azure.core.amqp.implementation.handler.SessionHandler.onSessionRemoteClose(SessionHandler.java:136) - at org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:152) - at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:324) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:291) - at com.azure.core.amqp.implementation.ReactorExecutor.run(ReactorExecutor.java:91) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Error occurred. Removing and disposing session","exception":"onSessionRemoteClose connectionId[MF_1553a4_1761714741022], entityName[cbs-session] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: cbs-session]","connectionId":"MF_1553a4_1761714741022","sessionName":"cbs-session"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteClose","connectionId":"MF_1553a4_1761714741022","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01","hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onTransportClosed","connectionId":"MF_1553a4_1761714741022","errorCondition":"n/a","errorDescription":"n/a","hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.TransportHandler - {"az.sdk.message":"onTransportClosed","connectionId":"MF_1553a4_1761714741022","hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalClose","connectionId":"MF_1553a4_1761714741022","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionUnbound","connectionId":"MF_1553a4_1761714741022","hostName":"hgzero-eventhub-ns.servicebus.windows.net","state":"CLOSED","remoteState":"CLOSED"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_1553a4_1761714741022","isTransient":false,"isInitiatedByClient":false,"shutdownMessage":"Connection handler closed."} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is closed. Requesting upstream.","entityPath":"hgzero-eventhub-name"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Connection not requested, yet. Requesting one.","entityPath":"hgzero-eventhub-name"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_b6a1c6_1761716882041"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkFinal","connectionId":"MF_1553a4_1761714741022","linkName":"hgzero-eventhub-name","entityPath":"hgzero-eventhub-name"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionFinal.","connectionId":"MF_1553a4_1761714741022","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01","sessionName":"hgzero-eventhub-name"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkFinal","connectionId":"MF_1553a4_1761714741022","linkName":"cbs:sender","entityPath":"$cbs"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkFinal","connectionId":"MF_1553a4_1761714741022","linkName":"cbs:receiver","entityPath":"$cbs"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionFinal.","connectionId":"MF_1553a4_1761714741022","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0' because it did not have any active links in the past 300000 milliseconds. TrackingId:7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0, SystemTracker:gateway5, Timestamp:2025-10-29T05:48:01","sessionName":"cbs-session"} -2025-10-29 14:48:02 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionFinal","connectionId":"MF_1553a4_1761714741022","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 14:48:06 [parallel-8] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Requesting from upstream.","connectionId":"MF_1553a4_1761714741022","entityPath":"$cbs","tryCount":0} -2025-10-29 14:48:06 [parallel-8] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Connection not requested, yet. Requesting one.","connectionId":"MF_1553a4_1761714741022","entityPath":"$cbs"} -2025-10-29 14:48:06 [parallel-8] WARN c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Retry attempts exhausted or exception was not retriable.","exception":"Cannot invoke \"java.util.List.add(Object)\" because \"this._sessions\" is null","connectionId":"MF_1553a4_1761714741022","entityPath":"$cbs","tryCount":1} -2025-10-29 14:48:06 [parallel-8] ERROR reactor.core.publisher.Operators - Operator called default onErrorDropped -reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.NullPointerException: Cannot invoke "java.util.List.add(Object)" because "this._sessions" is null -Caused by: java.lang.NullPointerException: Cannot invoke "java.util.List.add(Object)" because "this._sessions" is null - at org.apache.qpid.proton.engine.impl.ConnectionImpl.session(ConnectionImpl.java:91) - at org.apache.qpid.proton.engine.impl.ConnectionImpl.session(ConnectionImpl.java:39) - at com.azure.core.amqp.implementation.ReactorConnection.lambda$createSession$13(ReactorConnection.java:282) - at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) - at com.azure.core.amqp.implementation.ReactorConnection.lambda$createSession$14(ReactorConnection.java:279) - at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113) - at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) - at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:137) - at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.request(MonoIgnoreThen.java:164) - at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.request(FluxHide.java:152) - at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.request(MonoPeekTerminal.java:139) - at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171) - at reactor.core.publisher.MonoFlatMap$FlatMapMain.request(MonoFlatMap.java:194) - at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171) - at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171) - at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.request(FluxPeekFuseable.java:144) - at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.request(Operators.java:2331) - at com.azure.core.amqp.implementation.AmqpChannelProcessor.requestUpstream(AmqpChannelProcessor.java:317) - at com.azure.core.amqp.implementation.AmqpChannelProcessor.lambda$onError$4(AmqpChannelProcessor.java:213) - at reactor.core.publisher.LambdaMonoSubscriber.onNext(LambdaMonoSubscriber.java:171) - at reactor.core.publisher.MonoDelay$MonoDelayRunnable.propagateDelay(MonoDelay.java:270) - at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:285) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 14:48:06 [parallel-8] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Error in AMQP channel processor.","connectionId":"MF_1553a4_1761714741022","entityPath":"$cbs","subscriberId":"un_256947_1761716882039"} -2025-10-29 14:59:02 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/reserve -2025-10-29 14:59:02 [http-nio-8082-exec-4] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 14:59:02 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/reserve -2025-10-29 14:59:03 [http-nio-8082-exec-4] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.createMeeting 호출 - 파라미터: [user-005, dohyunjung, dohyun.jung@example.com, com.unicorn.hgzero.meeting.infra.dto.request.CreateMeetingRequest@272cbd2e] -2025-10-29 14:59:03 [http-nio-8082-exec-4] INFO c.u.h.m.i.c.MeetingController - 회의 예약 요청 - userId: user-005, title: 감리미 시스템 ITO 회의 -2025-10-29 14:59:03 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@15cb6a14 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 14:59:03 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@1f78ed67 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 14:59:03 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@4156cf0f (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 14:59:03 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@f8386fb (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 14:59:03 [http-nio-8082-exec-4] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@43715b45 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 14:59:03 [http-nio-8082-exec-4] INFO c.u.h.m.biz.service.MeetingService - Creating meeting: 감리미 시스템 ITO 회의 -2025-10-29 14:59:03 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* SELECT - COUNT(m) - FROM - MeetingEntity m - WHERE - m.organizerId = :organizerId - AND m.status IN ('SCHEDULED', 'IN_PROGRESS') - AND ( - ( - m.scheduledAt < :endTime - AND m.endTime > :startTime - ) - ) */ select - count(me1_0.meeting_id) - from - meetings me1_0 - where - me1_0.organizer_id=? - and me1_0.status in ('SCHEDULED', 'IN_PROGRESS') - and ( - ( - me1_0.scheduled_at? - ) - ) -2025-10-29 14:59:03 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at, - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meetings me1_0 - left join - meeting_participants p1_0 - on me1_0.meeting_id=p1_0.meeting_id - where - me1_0.meeting_id=? -2025-10-29 14:59:03 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingEntity */insert - into - meetings (created_at, description, end_time, ended_at, location, organizer_id, purpose, scheduled_at, started_at, status, template_id, title, updated_at, meeting_id) - values - (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -2025-10-29 14:59:03 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? - and mpe1_0.user_id=? - fetch - first ? rows only -2025-10-29 14:59:03 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? - and mpe1_0.user_id=? - fetch - first ? rows only -2025-10-29 14:59:03 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - ( - mpe1_0.meeting_id, mpe1_0.user_id - ) in ((?, ?)) -2025-10-29 14:59:03 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - ( - mpe1_0.meeting_id, mpe1_0.user_id - ) in ((?, ?)) -2025-10-29 14:59:03 [http-nio-8082-exec-4] DEBUG c.u.h.m.i.gateway.ParticipantGateway - Participants saved: meetingId=baf42658-0794-4e1f-9fea-375fd61a19a8, count=2 -2025-10-29 14:59:03 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Participants saved: meetingId=baf42658-0794-4e1f-9fea-375fd61a19a8, count=2 -2025-10-29 14:59:03 [http-nio-8082-exec-4] DEBUG c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 저장 - meetingId: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 14:59:03 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Meeting cached: meetingId=baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 14:59:03 [http-nio-8082-exec-4] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Creating and starting connection.","connectionId":"MF_b6a1c6_1761716882041","hostName":"hgzero-eventhub-ns.servicebus.windows.net","port":5671} -2025-10-29 14:59:03 [http-nio-8082-exec-4] INFO c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Starting reactor.","connectionId":"MF_b6a1c6_1761716882041"} -2025-10-29 14:59:03 [reactor-executor-2] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionInit","connectionId":"MF_b6a1c6_1761716882041","hostName":"hgzero-eventhub-ns.servicebus.windows.net","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 14:59:03 [reactor-executor-2] INFO c.a.c.a.i.handler.ReactorHandler - {"az.sdk.message":"reactor.onReactorInit","connectionId":"MF_b6a1c6_1761716882041"} -2025-10-29 14:59:03 [reactor-executor-2] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalOpen","connectionId":"MF_b6a1c6_1761716882041","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 14:59:03 [reactor-executor-2] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionBound","connectionId":"MF_b6a1c6_1761716882041","hostName":"hgzero-eventhub-ns.servicebus.windows.net","peerDetails":"hgzero-eventhub-ns.servicebus.windows.net:5671"} -2025-10-29 14:59:04 [reactor-executor-2] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteOpen","connectionId":"MF_b6a1c6_1761716882041","hostName":"hgzero-eventhub-ns.servicebus.windows.net","remoteContainer":"092e49bbdacc44a08ad91c848c7cb2b2_G10"} -2025-10-29 14:59:04 [reactor-executor-2] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is now active.","entityPath":"hgzero-eventhub-name"} -2025-10-29 14:59:04 [reactor-executor-2] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_b6a1c6_1761716882041","sessionName":"hgzero-eventhub-name","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 14:59:04 [reactor-executor-2] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Setting CBS channel.","connectionId":"MF_b6a1c6_1761716882041"} -2025-10-29 14:59:04 [reactor-executor-2] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_b6a1c6_1761716882041","sessionName":"cbs-session","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 14:59:04 [reactor-executor-2] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Emitting new response channel.","connectionId":"MF_b6a1c6_1761716882041","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 14:59:04 [reactor-executor-2] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Setting next AMQP channel.","connectionId":"MF_b6a1c6_1761716882041","entityPath":"$cbs"} -2025-10-29 14:59:04 [reactor-executor-2] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Next AMQP channel received.","connectionId":"MF_b6a1c6_1761716882041","entityPath":"$cbs","subscriberId":"un_3cf70b_1761717544071"} -2025-10-29 14:59:04 [reactor-executor-2] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_b6a1c6_1761716882041","linkName":"cbs:sender","entityPath":"$cbs","remoteTarget":"Target{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 14:59:04 [reactor-executor-2] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is now active.","connectionId":"MF_b6a1c6_1761716882041","entityPath":"$cbs"} -2025-10-29 14:59:04 [reactor-executor-2] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_b6a1c6_1761716882041","entityPath":"$cbs","linkName":"cbs:receiver","remoteSource":"Source{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, distributionMode=null, filter=null, defaultOutcome=null, outcomes=null, capabilities=null}"} -2025-10-29 14:59:04 [reactor-executor-2] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Scheduling refresh token task.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-name"} -2025-10-29 14:59:04 [reactor-executor-2] INFO c.a.c.a.i.ReactorSession - {"az.sdk.message":"Creating a new send link.","connectionId":"MF_b6a1c6_1761716882041","linkName":"hgzero-eventhub-name","sessionName":"hgzero-eventhub-name"} -2025-10-29 14:59:04 [reactor-executor-2] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_b6a1c6_1761716882041","linkName":"hgzero-eventhub-name","entityPath":"hgzero-eventhub-name","remoteTarget":"Target{address='hgzero-eventhub-name', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 14:59:04 [http-nio-8082-exec-4] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=notification, type=NOTIFICATION_REQUEST, partitionKey=du0928@gmail.com -2025-10-29 14:59:04 [http-nio-8082-exec-4] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=notification, type=NOTIFICATION_REQUEST, partitionKey=daewoong.jeon@kt.com -2025-10-29 14:59:04 [http-nio-8082-exec-4] INFO c.u.h.m.i.e.p.EventHubPublisher - 회의 생성 알림 발행 완료 - meetingId: baf42658-0794-4e1f-9fea-375fd61a19a8, participants count: 2 -2025-10-29 14:59:04 [http-nio-8082-exec-4] DEBUG c.u.h.m.biz.service.MeetingService - Meeting invitation events published: meetingId=baf42658-0794-4e1f-9fea-375fd61a19a8, participants=2 -2025-10-29 14:59:04 [http-nio-8082-exec-4] INFO c.u.h.m.biz.service.MeetingService - Meeting created successfully: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 14:59:04 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingParticipantEntity */insert - into - meeting_participants (attended, created_at, invitation_status, updated_at, meeting_id, user_id) - values - (?, ?, ?, ?, ?, ?) -2025-10-29 14:59:04 [http-nio-8082-exec-4] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingParticipantEntity */insert - into - meeting_participants (attended, created_at, invitation_status, updated_at, meeting_id, user_id) - values - (?, ?, ?, ?, ?, ?) -2025-10-29 14:59:04 [http-nio-8082-exec-4] INFO c.u.h.m.i.c.MeetingController - 회의 예약 완료 - userId: user-005, meetingId: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 14:59:04 [http-nio-8082-exec-4] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.createMeeting 완료 - 실행시간: 1489ms -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/baf42658-0794-4e1f-9fea-375fd61a19a8/start -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/baf42658-0794-4e1f-9fea-375fd61a19a8/start -2025-10-29 14:59:31 [http-nio-8082-exec-6] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.startMeeting 호출 - 파라미터: [baf42658-0794-4e1f-9fea-375fd61a19a8, user-005, dohyunjung, dohyun.jung@example.com] -2025-10-29 14:59:31 [http-nio-8082-exec-6] INFO c.u.h.m.i.c.MeetingController - 회의 시작 요청 - meetingId: baf42658-0794-4e1f-9fea-375fd61a19a8, userId: user-005 -2025-10-29 14:59:31 [http-nio-8082-exec-6] INFO c.u.h.m.biz.service.MeetingService - Starting meeting: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 조회 성공 - meetingId: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 14:59:31 [http-nio-8082-exec-6] WARN c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 조회 실패 (DB에서 조회) - meetingId: baf42658-0794-4e1f-9fea-375fd61a19a8, 에러: Unrecognized field "inProgress" (class com.unicorn.hgzero.meeting.biz.domain.Meeting), not marked as ignorable (13 known properties: "scheduledAt", "endTime", "organizerId", "endedAt", "status", "startedAt", "location", "meetingId", "title", "description", "purpose", "participants", "templateId"]) - at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 419] (through reference chain: com.unicorn.hgzero.meeting.biz.domain.Meeting["inProgress"]) -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG c.u.h.m.biz.service.MeetingService - Cache miss for meeting: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 저장 - meetingId: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - select - se1_0.session_id, - se1_0.created_at, - se1_0.ended_at, - se1_0.meeting_id, - se1_0.minutes_id, - se1_0.started_at, - se1_0.started_by, - se1_0.status, - se1_0.updated_at - from - sessions se1_0 - where - se1_0.session_id=? -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG c.u.h.m.biz.service.MeetingService - Session created: sessionId=de4dbe83-6658-4476-a1f1-c4c4785f02f0, meetingId=baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG c.u.h.m.biz.service.MeetingService - Meeting status updated to IN_PROGRESS: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG c.u.h.m.infra.cache.CacheService - 캐시 삭제 - key: meeting:baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG c.u.h.m.biz.service.MeetingService - Meeting cache evicted: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version, - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes me1_0 - left join - minutes_sections s1_0 - on me1_0.minutes_id=s1_0.minutes_id - where - me1_0.minutes_id=? -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG c.u.h.m.biz.service.MeetingService - Minutes draft created: minutesId=b47687ff-39e5-41dc-8a1c-e12cf3a7af33, meetingId=baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 14:59:31 [http-nio-8082-exec-6] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=meeting, type=MEETING_STARTED, partitionKey=baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG c.u.h.m.biz.service.MeetingService - MeetingStarted event published: meetingId=baf42658-0794-4e1f-9fea-375fd61a19a8, sessionId=de4dbe83-6658-4476-a1f1-c4c4785f02f0 -2025-10-29 14:59:31 [http-nio-8082-exec-6] INFO c.u.h.m.biz.service.MeetingService - Meeting started successfully: meetingId=baf42658-0794-4e1f-9fea-375fd61a19a8, sessionId=de4dbe83-6658-4476-a1f1-c4c4785f02f0, minutesId=b47687ff-39e5-41dc-8a1c-e12cf3a7af33 -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.SessionEntity */insert - into - sessions (created_at, ended_at, meeting_id, minutes_id, started_at, started_by, status, updated_at, session_id) - values - (?, ?, ?, ?, ?, ?, ?, ?, ?) -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */insert - into - minutes (created_at, created_by, finalized_at, finalized_by, meeting_id, status, title, updated_at, version, minutes_id) - values - (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingEntity */update meetings - set - description=?, - end_time=?, - ended_at=?, - location=?, - organizer_id=?, - purpose=?, - scheduled_at=?, - started_at=?, - status=?, - template_id=?, - title=?, - updated_at=? - where - meeting_id=? -2025-10-29 14:59:31 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.SessionEntity */update sessions - set - ended_at=?, - meeting_id=?, - minutes_id=?, - started_at=?, - started_by=?, - status=?, - updated_at=? - where - session_id=? -2025-10-29 14:59:32 [http-nio-8082-exec-6] INFO c.u.h.m.i.c.MeetingController - 회의 시작 완료 - meetingId: baf42658-0794-4e1f-9fea-375fd61a19a8, sessionId: de4dbe83-6658-4476-a1f1-c4c4785f02f0 -2025-10-29 14:59:32 [http-nio-8082-exec-6] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.startMeeting 완료 - 실행시간: 880ms -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/b47687ff-39e5-41dc-8a1c-e12cf3a7af33/finalize -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/b47687ff-39e5-41dc-8a1c-e12cf3a7af33/finalize -2025-10-29 15:02:19 [http-nio-8082-exec-9] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, b47687ff-39e5-41dc-8a1c-e12cf3a7af33] -2025-10-29 15:02:19 [http-nio-8082-exec-9] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: b47687ff-39e5-41dc-8a1c-e12cf3a7af33 -2025-10-29 15:02:19 [http-nio-8082-exec-9] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: b47687ff-39e5-41dc-8a1c-e12cf3a7af33 -2025-10-29 15:02:19 [http-nio-8082-exec-9] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: b47687ff-39e5-41dc-8a1c-e12cf3a7af33 by user: user-005 -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 15:02:19 [http-nio-8082-exec-9] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: b47687ff-39e5-41dc-8a1c-e12cf3a7af33, version: 2 -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesSectionEntity */update minutes_sections - set - content=?, - locked=?, - locked_by=?, - minutes_id=?, - "order"=?, - title=?, - type=?, - updated_at=?, - verified=? - where - id=? -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesSectionEntity */update minutes_sections - set - content=?, - locked=?, - locked_by=?, - minutes_id=?, - "order"=?, - title=?, - type=?, - updated_at=?, - verified=? - where - id=? -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesSectionEntity */update minutes_sections - set - content=?, - locked=?, - locked_by=?, - minutes_id=?, - "order"=?, - title=?, - type=?, - updated_at=?, - verified=? - where - id=? -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 15:02:19 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:02:20 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:02:20 [http-nio-8082-exec-9] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 15:02:20 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:02:20 [http-nio-8082-exec-9] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 15:02:20 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:02:20 [http-nio-8082-exec-9] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: b47687ff-39e5-41dc-8a1c-e12cf3a7af33 -2025-10-29 15:02:20 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 15:02:20 [http-nio-8082-exec-9] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 42703 -2025-10-29 15:02:20 [http-nio-8082-exec-9] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - ERROR: column ase1_0.decisions does not exist - Position: 118 -2025-10-29 15:02:20 [http-nio-8082-exec-9] ERROR c.u.hgzero.common.aop.LoggingAspect - [Service] com.unicorn.hgzero.meeting.biz.service.AgendaSectionService.getAgendaSectionsByMinutesId 실패 - 실행시간: 56ms, 에러: JDBC exception executing SQL [/* */ select ase1_0.id,ase1_0.agenda_number,ase1_0.agenda_title,ase1_0.ai_summary_short,ase1_0.created_at,ase1_0.decisions,ase1_0.discussions,ase1_0.meeting_id,ase1_0.minutes_id,ase1_0.opinions,ase1_0.pending_items,ase1_0.todos,ase1_0.updated_at from agenda_sections ase1_0 where ase1_0.minutes_id=? order by ase1_0.agenda_number] [ERROR: column ase1_0.decisions does not exist - Position: 118] [n/a]; SQL [n/a] -2025-10-29 15:02:20 [http-nio-8082-exec-9] ERROR c.u.h.m.i.c.MinutesController - 안건 정보 조회 실패 - minutesId: b47687ff-39e5-41dc-8a1c-e12cf3a7af33 -org.springframework.dao.InvalidDataAccessResourceUsageException: JDBC exception executing SQL [/* */ select ase1_0.id,ase1_0.agenda_number,ase1_0.agenda_title,ase1_0.ai_summary_short,ase1_0.created_at,ase1_0.decisions,ase1_0.discussions,ase1_0.meeting_id,ase1_0.minutes_id,ase1_0.opinions,ase1_0.pending_items,ase1_0.todos,ase1_0.updated_at from agenda_sections ase1_0 where ase1_0.minutes_id=? order by ase1_0.agenda_number] [ERROR: column ase1_0.decisions does not exist - Position: 118] [n/a]; SQL [n/a] - at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:277) - at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:241) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:550) - at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) - at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:335) - at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:160) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:136) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) - at jdk.proxy2/jdk.proxy2.$Proxy174.findByMinutesIdOrderByAgendaNumber(Unknown Source) - at com.unicorn.hgzero.meeting.biz.service.AgendaSectionService.getAgendaSectionsByMinutesId(AgendaSectionService.java:33) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) - at com.unicorn.hgzero.common.aop.LoggingAspect.logService(LoggingAspect.java:86) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627) - at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) - at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) - at com.unicorn.hgzero.meeting.biz.service.AgendaSectionService$$SpringCGLIB$$0.getAgendaSectionsByMinutesId() - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.buildAgendaInfoList(MinutesController.java:755) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.convertToMinutesDetailResponse(MinutesController.java:620) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes(MinutesController.java:240) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) - at com.unicorn.hgzero.common.aop.LoggingAspect.logController(LoggingAspect.java:56) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627) - at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController$$SpringCGLIB$$0.finalizeMinutes() - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) - at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) - at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340) - at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128) - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at com.unicorn.hgzero.meeting.infra.config.jwt.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.base/java.lang.Thread.run(Thread.java:1583) -Caused by: org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [/* */ select ase1_0.id,ase1_0.agenda_number,ase1_0.agenda_title,ase1_0.ai_summary_short,ase1_0.created_at,ase1_0.decisions,ase1_0.discussions,ase1_0.meeting_id,ase1_0.minutes_id,ase1_0.opinions,ase1_0.pending_items,ase1_0.todos,ase1_0.updated_at from agenda_sections ase1_0 where ase1_0.minutes_id=? order by ase1_0.agenda_number] [ERROR: column ase1_0.decisions does not exist - Position: 118] [n/a] - at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:91) - at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:58) - at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) - at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94) - at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:264) - at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.getResultSet(DeferredResultSetAccess.java:167) - at org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.advanceNext(JdbcValuesResultSetImpl.java:265) - at org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.processNext(JdbcValuesResultSetImpl.java:145) - at org.hibernate.sql.results.jdbc.internal.AbstractJdbcValues.next(AbstractJdbcValues.java:19) - at org.hibernate.sql.results.internal.RowProcessingStateStandardImpl.next(RowProcessingStateStandardImpl.java:67) - at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:204) - at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:33) - at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:211) - at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:83) - at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:76) - at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:65) - at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.lambda$new$2(ConcreteSqmSelectQueryPlan.java:139) - at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:382) - at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:302) - at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:526) - at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:423) - at org.hibernate.query.Query.getResultList(Query.java:120) - at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:129) - at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:92) - at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:152) - at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:140) - at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170) - at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) - at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:169) - at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:148) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:70) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) - at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138) - ... 187 common frames omitted -Caused by: org.postgresql.util.PSQLException: ERROR: column ase1_0.decisions does not exist - Position: 118 - at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733) - at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2420) - at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372) - at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:517) - at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:434) - at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:194) - at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:137) - at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) - at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) - at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:246) - ... 219 common frames omitted -2025-10-29 15:02:20 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 15:02:20 [http-nio-8082-exec-9] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: b47687ff-39e5-41dc-8a1c-e12cf3a7af33, totalCount: 0 -2025-10-29 15:02:20 [http-nio-8082-exec-9] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 15:02:20 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 15:02:20 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 15:02:20 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:02:21 [http-nio-8082-exec-9] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 - minutesId: b47687ff-39e5-41dc-8a1c-e12cf3a7af33 -2025-10-29 15:02:21 [http-nio-8082-exec-9] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: b47687ff-39e5-41dc-8a1c-e12cf3a7af33 -2025-10-29 15:02:21 [http-nio-8082-exec-9] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 15:02:21 [http-nio-8082-exec-9] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=b47687ff-39e5-41dc-8a1c-e12cf3a7af33 -2025-10-29 15:02:21 [http-nio-8082-exec-9] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 15:02:21 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:02:21 [http-nio-8082-exec-9] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=b47687ff-39e5-41dc-8a1c-e12cf3a7af33 -2025-10-29 15:02:21 [http-nio-8082-exec-9] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: b47687ff-39e5-41dc-8a1c-e12cf3a7af33, meetingId: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 15:02:21 [http-nio-8082-exec-9] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: b47687ff-39e5-41dc-8a1c-e12cf3a7af33, meetingId: baf42658-0794-4e1f-9fea-375fd61a19a8 -2025-10-29 15:02:21 [http-nio-8082-exec-9] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: b47687ff-39e5-41dc-8a1c-e12cf3a7af33 -2025-10-29 15:02:21 [http-nio-8082-exec-9] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 1977ms -2025-10-29 15:06:21 [reactor-executor-2] WARN c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onTransportError","connectionId":"MF_b6a1c6_1761716882041","errorCondition":"proton:io","errorDescription":"Connection reset","hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_b6a1c6_1761716882041","isTransient":false,"isInitiatedByClient":false,"shutdownMessage":"Connection reset, errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A]"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionUnbound","connectionId":"MF_b6a1c6_1761716882041","hostName":"hgzero-eventhub-ns.servicebus.windows.net","state":"ACTIVE","remoteState":"ACTIVE"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkFinal","connectionId":"MF_b6a1c6_1761716882041","linkName":"hgzero-eventhub-name","entityPath":"hgzero-eventhub-name"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionFinal.","connectionId":"MF_b6a1c6_1761716882041","errorCondition":null,"errorDescription":null,"sessionName":"hgzero-eventhub-name"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkFinal","connectionId":"MF_b6a1c6_1761716882041","linkName":"cbs:sender","entityPath":"$cbs"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkFinal","connectionId":"MF_b6a1c6_1761716882041","linkName":"cbs:receiver","entityPath":"$cbs"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is closed. Requesting upstream.","connectionId":"MF_b6a1c6_1761716882041","entityPath":"$cbs"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Connection not requested, yet. Requesting one.","connectionId":"MF_b6a1c6_1761716882041","entityPath":"$cbs"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Emitting new response channel.","connectionId":"MF_b6a1c6_1761716882041","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Setting next AMQP channel.","connectionId":"MF_b6a1c6_1761716882041","entityPath":"$cbs"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Upstream connection publisher was completed. Terminating processor.","connectionId":"MF_b6a1c6_1761716882041","entityPath":"$cbs"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionFinal.","connectionId":"MF_b6a1c6_1761716882041","errorCondition":null,"errorDescription":null,"sessionName":"cbs-session"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionFinal","connectionId":"MF_b6a1c6_1761716882041","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Closing executor.","connectionId":"MF_b6a1c6_1761716882041"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"Sender link was never active. Closing endpoint states.","connectionId":"MF_b6a1c6_1761716882041","linkName":"cbs","entityPath":"$cbs"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"Receiver link was never active. Closing endpoint states","connectionId":"MF_b6a1c6_1761716882041","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is disposed.","connectionId":"MF_b6a1c6_1761716882041","entityPath":"$cbs"} -2025-10-29 15:06:21 [reactor-executor-2] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalClose","connectionId":"MF_b6a1c6_1761716882041","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:06:25 [reactor-executor-2] INFO c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Processing all pending tasks and closing old reactor.","connectionId":"MF_b6a1c6_1761716882041"} -2025-10-29 15:06:25 [reactor-executor-2] INFO c.a.c.a.i.ReactorDispatcher - {"az.sdk.message":"Reactor selectable is being disposed.","connectionId":"MF_b6a1c6_1761716882041"} -2025-10-29 15:06:25 [reactor-executor-2] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"onConnectionShutdown. Shutting down.","connectionId":"MF_b6a1c6_1761716882041","isTransient":false,"isInitiatedByClient":false,"shutdownMessage":"connectionId[MF_b6a1c6_1761716882041] Reactor selectable is disposed.","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:06:25 [reactor-executor-2] ERROR reactor.core.publisher.Operators - Operator called default onErrorDropped -reactor.core.Exceptions$ErrorCallbackNotImplemented: com.azure.core.amqp.exception.AmqpException: Connection reset, errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A] -Caused by: com.azure.core.amqp.exception.AmqpException: Connection reset, errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A] - at com.azure.core.amqp.implementation.ExceptionUtil.toException(ExceptionUtil.java:85) - at com.azure.core.amqp.implementation.handler.ConnectionHandler.notifyErrorContext(ConnectionHandler.java:351) - at com.azure.core.amqp.implementation.handler.ConnectionHandler.onTransportError(ConnectionHandler.java:253) - at org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:191) - at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:324) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:291) - at com.azure.core.amqp.implementation.ReactorExecutor.run(ReactorExecutor.java:91) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 15:06:25 [reactor-executor-2] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Transient error occurred. Retrying.","exception":"Connection reset, errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A]","entityPath":"hgzero-eventhub-name","tryCount":0,"interval_ms":4511} -2025-10-29 15:06:25 [reactor-executor-2] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"onConnectionShutdown. Shutting down.","connectionId":"MF_b6a1c6_1761716882041","isTransient":false,"isInitiatedByClient":false,"shutdownMessage":"Finished processing pending tasks.","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:06:29 [parallel-2] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Requesting from upstream.","entityPath":"hgzero-eventhub-name","tryCount":0} -2025-10-29 15:06:29 [parallel-2] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Connection not requested, yet. Requesting one.","entityPath":"hgzero-eventhub-name"} -2025-10-29 15:06:29 [parallel-2] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_71f49f_1761717989872"} -2025-10-29 15:06:29 [parallel-2] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"} -2025-10-29 15:18:13 [http-nio-8082-exec-2] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/reserve -2025-10-29 15:18:13 [http-nio-8082-exec-2] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 15:18:13 [http-nio-8082-exec-2] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/reserve -2025-10-29 15:18:13 [http-nio-8082-exec-2] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.createMeeting 호출 - 파라미터: [user-005, dohyunjung, dohyun.jung@example.com, com.unicorn.hgzero.meeting.infra.dto.request.CreateMeetingRequest@15b81e72] -2025-10-29 15:18:13 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MeetingController - 회의 예약 요청 - userId: user-005, title: 인터넷 일 상한 속도제어 관련 이슈사항 검토 회의 -2025-10-29 15:18:13 [http-nio-8082-exec-2] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@6c630f46 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 15:18:13 [http-nio-8082-exec-2] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@1b8a068a (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 15:18:13 [http-nio-8082-exec-2] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@65951cbf (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 15:18:13 [http-nio-8082-exec-2] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@308bd5f1 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 15:18:13 [http-nio-8082-exec-2] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@1ba4f9f4 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. -2025-10-29 15:18:14 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MeetingService - Creating meeting: 인터넷 일 상한 속도제어 관련 이슈사항 검토 회의 -2025-10-29 15:18:14 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* SELECT - COUNT(m) - FROM - MeetingEntity m - WHERE - m.organizerId = :organizerId - AND m.status IN ('SCHEDULED', 'IN_PROGRESS') - AND ( - ( - m.scheduledAt < :endTime - AND m.endTime > :startTime - ) - ) */ select - count(me1_0.meeting_id) - from - meetings me1_0 - where - me1_0.organizer_id=? - and me1_0.status in ('SCHEDULED', 'IN_PROGRESS') - and ( - ( - me1_0.scheduled_at? - ) - ) -2025-10-29 15:18:14 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at, - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meetings me1_0 - left join - meeting_participants p1_0 - on me1_0.meeting_id=p1_0.meeting_id - where - me1_0.meeting_id=? -2025-10-29 15:18:14 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingEntity */insert - into - meetings (created_at, description, end_time, ended_at, location, organizer_id, purpose, scheduled_at, started_at, status, template_id, title, updated_at, meeting_id) - values - (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -2025-10-29 15:18:14 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? - and mpe1_0.user_id=? - fetch - first ? rows only -2025-10-29 15:18:14 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? - and mpe1_0.user_id=? - fetch - first ? rows only -2025-10-29 15:18:14 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - ( - mpe1_0.meeting_id, mpe1_0.user_id - ) in ((?, ?)) -2025-10-29 15:18:14 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - ( - mpe1_0.meeting_id, mpe1_0.user_id - ) in ((?, ?)) -2025-10-29 15:18:14 [http-nio-8082-exec-2] DEBUG c.u.h.m.i.gateway.ParticipantGateway - Participants saved: meetingId=603438ef-68d9-4498-9c54-bc3fe258b941, count=2 -2025-10-29 15:18:14 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Participants saved: meetingId=603438ef-68d9-4498-9c54-bc3fe258b941, count=2 -2025-10-29 15:18:15 [http-nio-8082-exec-2] DEBUG c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 저장 - meetingId: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:18:15 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Meeting cached: meetingId=603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:18:15 [http-nio-8082-exec-2] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Creating and starting connection.","connectionId":"MF_71f49f_1761717989872","hostName":"hgzero-eventhub-ns.servicebus.windows.net","port":5671} -2025-10-29 15:18:15 [http-nio-8082-exec-2] INFO c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Starting reactor.","connectionId":"MF_71f49f_1761717989872"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionInit","connectionId":"MF_71f49f_1761717989872","hostName":"hgzero-eventhub-ns.servicebus.windows.net","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.handler.ReactorHandler - {"az.sdk.message":"reactor.onReactorInit","connectionId":"MF_71f49f_1761717989872"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalOpen","connectionId":"MF_71f49f_1761717989872","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionBound","connectionId":"MF_71f49f_1761717989872","hostName":"hgzero-eventhub-ns.servicebus.windows.net","peerDetails":"hgzero-eventhub-ns.servicebus.windows.net:5671"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteOpen","connectionId":"MF_71f49f_1761717989872","hostName":"hgzero-eventhub-ns.servicebus.windows.net","remoteContainer":"7e3b9b68da8b4cc78a9d8fa8a5ca955e_G0"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is now active.","entityPath":"hgzero-eventhub-name"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_71f49f_1761717989872","sessionName":"hgzero-eventhub-name","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Setting CBS channel.","connectionId":"MF_71f49f_1761717989872"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_71f49f_1761717989872","sessionName":"cbs-session","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Emitting new response channel.","connectionId":"MF_71f49f_1761717989872","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Setting next AMQP channel.","connectionId":"MF_71f49f_1761717989872","entityPath":"$cbs"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Next AMQP channel received.","connectionId":"MF_71f49f_1761717989872","entityPath":"$cbs","subscriberId":"un_419ef8_1761718695304"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_71f49f_1761717989872","linkName":"cbs:sender","entityPath":"$cbs","remoteTarget":"Target{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is now active.","connectionId":"MF_71f49f_1761717989872","entityPath":"$cbs"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_71f49f_1761717989872","entityPath":"$cbs","linkName":"cbs:receiver","remoteSource":"Source{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, distributionMode=null, filter=null, defaultOutcome=null, outcomes=null, capabilities=null}"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Scheduling refresh token task.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-name"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.ReactorSession - {"az.sdk.message":"Creating a new send link.","connectionId":"MF_71f49f_1761717989872","linkName":"hgzero-eventhub-name","sessionName":"hgzero-eventhub-name"} -2025-10-29 15:18:15 [reactor-executor-3] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_71f49f_1761717989872","linkName":"hgzero-eventhub-name","entityPath":"hgzero-eventhub-name","remoteTarget":"Target{address='hgzero-eventhub-name', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 15:18:15 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=notification, type=NOTIFICATION_REQUEST, partitionKey=du0928@gmail.com -2025-10-29 15:18:15 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=notification, type=NOTIFICATION_REQUEST, partitionKey=daewoong.jeon@kt.com -2025-10-29 15:18:15 [http-nio-8082-exec-2] INFO c.u.h.m.i.e.p.EventHubPublisher - 회의 생성 알림 발행 완료 - meetingId: 603438ef-68d9-4498-9c54-bc3fe258b941, participants count: 2 -2025-10-29 15:18:15 [http-nio-8082-exec-2] DEBUG c.u.h.m.biz.service.MeetingService - Meeting invitation events published: meetingId=603438ef-68d9-4498-9c54-bc3fe258b941, participants=2 -2025-10-29 15:18:15 [http-nio-8082-exec-2] INFO c.u.h.m.biz.service.MeetingService - Meeting created successfully: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:18:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingParticipantEntity */insert - into - meeting_participants (attended, created_at, invitation_status, updated_at, meeting_id, user_id) - values - (?, ?, ?, ?, ?, ?) -2025-10-29 15:18:15 [http-nio-8082-exec-2] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingParticipantEntity */insert - into - meeting_participants (attended, created_at, invitation_status, updated_at, meeting_id, user_id) - values - (?, ?, ?, ?, ?, ?) -2025-10-29 15:18:15 [http-nio-8082-exec-2] INFO c.u.h.m.i.c.MeetingController - 회의 예약 완료 - userId: user-005, meetingId: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:18:15 [http-nio-8082-exec-2] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.createMeeting 완료 - 실행시간: 2353ms -2025-10-29 15:18:30 [http-nio-8082-exec-3] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/603438ef-68d9-4498-9c54-bc3fe258b941/start -2025-10-29 15:18:30 [http-nio-8082-exec-3] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 15:18:30 [http-nio-8082-exec-3] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/603438ef-68d9-4498-9c54-bc3fe258b941/start -2025-10-29 15:18:30 [http-nio-8082-exec-3] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.startMeeting 호출 - 파라미터: [603438ef-68d9-4498-9c54-bc3fe258b941, user-005, dohyunjung, dohyun.jung@example.com] -2025-10-29 15:18:30 [http-nio-8082-exec-3] INFO c.u.h.m.i.c.MeetingController - 회의 시작 요청 - meetingId: 603438ef-68d9-4498-9c54-bc3fe258b941, userId: user-005 -2025-10-29 15:18:30 [http-nio-8082-exec-3] INFO c.u.h.m.biz.service.MeetingService - Starting meeting: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:18:30 [http-nio-8082-exec-3] DEBUG c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 조회 성공 - meetingId: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:18:30 [http-nio-8082-exec-3] WARN c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 조회 실패 (DB에서 조회) - meetingId: 603438ef-68d9-4498-9c54-bc3fe258b941, 에러: Unrecognized field "inProgress" (class com.unicorn.hgzero.meeting.biz.domain.Meeting), not marked as ignorable (13 known properties: "scheduledAt", "endTime", "organizerId", "endedAt", "status", "startedAt", "location", "meetingId", "title", "description", "purpose", "participants", "templateId"]) - at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 435] (through reference chain: com.unicorn.hgzero.meeting.biz.domain.Meeting["inProgress"]) -2025-10-29 15:18:30 [http-nio-8082-exec-3] DEBUG c.u.h.m.biz.service.MeetingService - Cache miss for meeting: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:18:30 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 15:18:30 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 15:18:30 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:18:31 [http-nio-8082-exec-3] DEBUG c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 저장 - meetingId: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:18:31 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - select - se1_0.session_id, - se1_0.created_at, - se1_0.ended_at, - se1_0.meeting_id, - se1_0.minutes_id, - se1_0.started_at, - se1_0.started_by, - se1_0.status, - se1_0.updated_at - from - sessions se1_0 - where - se1_0.session_id=? -2025-10-29 15:18:31 [http-nio-8082-exec-3] DEBUG c.u.h.m.biz.service.MeetingService - Session created: sessionId=dddba642-b9e6-432e-a580-8da2aedf46ad, meetingId=603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:18:31 [http-nio-8082-exec-3] DEBUG c.u.h.m.biz.service.MeetingService - Meeting status updated to IN_PROGRESS: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:18:31 [http-nio-8082-exec-3] DEBUG c.u.h.m.infra.cache.CacheService - 캐시 삭제 - key: meeting:603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:18:31 [http-nio-8082-exec-3] DEBUG c.u.h.m.biz.service.MeetingService - Meeting cache evicted: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:18:31 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 15:18:31 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version, - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes me1_0 - left join - minutes_sections s1_0 - on me1_0.minutes_id=s1_0.minutes_id - where - me1_0.minutes_id=? -2025-10-29 15:18:31 [http-nio-8082-exec-3] DEBUG c.u.h.m.biz.service.MeetingService - Minutes draft created: minutesId=5c037d21-599d-4fa9-b712-3cdf676451c3, meetingId=603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:18:31 [http-nio-8082-exec-3] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=meeting, type=MEETING_STARTED, partitionKey=603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:18:31 [http-nio-8082-exec-3] DEBUG c.u.h.m.biz.service.MeetingService - MeetingStarted event published: meetingId=603438ef-68d9-4498-9c54-bc3fe258b941, sessionId=dddba642-b9e6-432e-a580-8da2aedf46ad -2025-10-29 15:18:31 [http-nio-8082-exec-3] INFO c.u.h.m.biz.service.MeetingService - Meeting started successfully: meetingId=603438ef-68d9-4498-9c54-bc3fe258b941, sessionId=dddba642-b9e6-432e-a580-8da2aedf46ad, minutesId=5c037d21-599d-4fa9-b712-3cdf676451c3 -2025-10-29 15:18:31 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.SessionEntity */insert - into - sessions (created_at, ended_at, meeting_id, minutes_id, started_at, started_by, status, updated_at, session_id) - values - (?, ?, ?, ?, ?, ?, ?, ?, ?) -2025-10-29 15:18:31 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */insert - into - minutes (created_at, created_by, finalized_at, finalized_by, meeting_id, status, title, updated_at, version, minutes_id) - values - (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -2025-10-29 15:18:31 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingEntity */update meetings - set - description=?, - end_time=?, - ended_at=?, - location=?, - organizer_id=?, - purpose=?, - scheduled_at=?, - started_at=?, - status=?, - template_id=?, - title=?, - updated_at=? - where - meeting_id=? -2025-10-29 15:18:31 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.SessionEntity */update sessions - set - ended_at=?, - meeting_id=?, - minutes_id=?, - started_at=?, - started_by=?, - status=?, - updated_at=? - where - session_id=? -2025-10-29 15:18:31 [http-nio-8082-exec-3] INFO c.u.h.m.i.c.MeetingController - 회의 시작 완료 - meetingId: 603438ef-68d9-4498-9c54-bc3fe258b941, sessionId: dddba642-b9e6-432e-a580-8da2aedf46ad -2025-10-29 15:18:31 [http-nio-8082-exec-3] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.startMeeting 완료 - 실행시간: 649ms -2025-10-29 15:20:57 [http-nio-8082-exec-6] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/5c037d21-599d-4fa9-b712-3cdf676451c3/finalize -2025-10-29 15:20:57 [http-nio-8082-exec-6] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 15:20:57 [http-nio-8082-exec-6] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/5c037d21-599d-4fa9-b712-3cdf676451c3/finalize -2025-10-29 15:20:57 [http-nio-8082-exec-6] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, 5c037d21-599d-4fa9-b712-3cdf676451c3] -2025-10-29 15:20:57 [http-nio-8082-exec-6] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: 5c037d21-599d-4fa9-b712-3cdf676451c3 -2025-10-29 15:20:58 [http-nio-8082-exec-6] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: 5c037d21-599d-4fa9-b712-3cdf676451c3 -2025-10-29 15:20:58 [http-nio-8082-exec-6] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: 5c037d21-599d-4fa9-b712-3cdf676451c3 by user: user-005 -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 15:20:58 [http-nio-8082-exec-6] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: 5c037d21-599d-4fa9-b712-3cdf676451c3, version: 2 -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesSectionEntity */update minutes_sections - set - content=?, - locked=?, - locked_by=?, - minutes_id=?, - "order"=?, - title=?, - type=?, - updated_at=?, - verified=? - where - id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesSectionEntity */update minutes_sections - set - content=?, - locked=?, - locked_by=?, - minutes_id=?, - "order"=?, - title=?, - type=?, - updated_at=?, - verified=? - where - id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesSectionEntity */update minutes_sections - set - content=?, - locked=?, - locked_by=?, - minutes_id=?, - "order"=?, - title=?, - type=?, - updated_at=?, - verified=? - where - id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:20:58 [http-nio-8082-exec-6] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: 5c037d21-599d-4fa9-b712-3cdf676451c3 -2025-10-29 15:20:58 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 15:20:58 [http-nio-8082-exec-6] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 42703 -2025-10-29 15:20:58 [http-nio-8082-exec-6] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - ERROR: column ase1_0.decisions does not exist - Position: 118 -2025-10-29 15:20:58 [http-nio-8082-exec-6] ERROR c.u.hgzero.common.aop.LoggingAspect - [Service] com.unicorn.hgzero.meeting.biz.service.AgendaSectionService.getAgendaSectionsByMinutesId 실패 - 실행시간: 36ms, 에러: JDBC exception executing SQL [/* */ select ase1_0.id,ase1_0.agenda_number,ase1_0.agenda_title,ase1_0.ai_summary_short,ase1_0.created_at,ase1_0.decisions,ase1_0.discussions,ase1_0.meeting_id,ase1_0.minutes_id,ase1_0.opinions,ase1_0.pending_items,ase1_0.todos,ase1_0.updated_at from agenda_sections ase1_0 where ase1_0.minutes_id=? order by ase1_0.agenda_number] [ERROR: column ase1_0.decisions does not exist - Position: 118] [n/a]; SQL [n/a] -2025-10-29 15:20:59 [http-nio-8082-exec-6] ERROR c.u.h.m.i.c.MinutesController - 안건 정보 조회 실패 - minutesId: 5c037d21-599d-4fa9-b712-3cdf676451c3 -org.springframework.dao.InvalidDataAccessResourceUsageException: JDBC exception executing SQL [/* */ select ase1_0.id,ase1_0.agenda_number,ase1_0.agenda_title,ase1_0.ai_summary_short,ase1_0.created_at,ase1_0.decisions,ase1_0.discussions,ase1_0.meeting_id,ase1_0.minutes_id,ase1_0.opinions,ase1_0.pending_items,ase1_0.todos,ase1_0.updated_at from agenda_sections ase1_0 where ase1_0.minutes_id=? order by ase1_0.agenda_number] [ERROR: column ase1_0.decisions does not exist - Position: 118] [n/a]; SQL [n/a] - at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:277) - at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:241) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:550) - at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) - at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:335) - at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:160) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:136) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) - at jdk.proxy2/jdk.proxy2.$Proxy174.findByMinutesIdOrderByAgendaNumber(Unknown Source) - at com.unicorn.hgzero.meeting.biz.service.AgendaSectionService.getAgendaSectionsByMinutesId(AgendaSectionService.java:33) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) - at com.unicorn.hgzero.common.aop.LoggingAspect.logService(LoggingAspect.java:86) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627) - at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) - at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) - at com.unicorn.hgzero.meeting.biz.service.AgendaSectionService$$SpringCGLIB$$0.getAgendaSectionsByMinutesId() - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.buildAgendaInfoList(MinutesController.java:755) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.convertToMinutesDetailResponse(MinutesController.java:620) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes(MinutesController.java:240) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) - at com.unicorn.hgzero.common.aop.LoggingAspect.logController(LoggingAspect.java:56) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627) - at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController$$SpringCGLIB$$0.finalizeMinutes() - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) - at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) - at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340) - at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128) - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at com.unicorn.hgzero.meeting.infra.config.jwt.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.base/java.lang.Thread.run(Thread.java:1583) -Caused by: org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [/* */ select ase1_0.id,ase1_0.agenda_number,ase1_0.agenda_title,ase1_0.ai_summary_short,ase1_0.created_at,ase1_0.decisions,ase1_0.discussions,ase1_0.meeting_id,ase1_0.minutes_id,ase1_0.opinions,ase1_0.pending_items,ase1_0.todos,ase1_0.updated_at from agenda_sections ase1_0 where ase1_0.minutes_id=? order by ase1_0.agenda_number] [ERROR: column ase1_0.decisions does not exist - Position: 118] [n/a] - at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:91) - at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:58) - at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) - at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94) - at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:264) - at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.getResultSet(DeferredResultSetAccess.java:167) - at org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.advanceNext(JdbcValuesResultSetImpl.java:265) - at org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.processNext(JdbcValuesResultSetImpl.java:145) - at org.hibernate.sql.results.jdbc.internal.AbstractJdbcValues.next(AbstractJdbcValues.java:19) - at org.hibernate.sql.results.internal.RowProcessingStateStandardImpl.next(RowProcessingStateStandardImpl.java:67) - at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:204) - at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:33) - at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:211) - at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:83) - at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:76) - at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:65) - at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.lambda$new$2(ConcreteSqmSelectQueryPlan.java:139) - at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:382) - at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:302) - at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:526) - at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:423) - at org.hibernate.query.Query.getResultList(Query.java:120) - at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:129) - at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:92) - at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:152) - at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:140) - at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170) - at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) - at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:169) - at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:148) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:70) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) - at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138) - ... 187 common frames omitted -Caused by: org.postgresql.util.PSQLException: ERROR: column ase1_0.decisions does not exist - Position: 118 - at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733) - at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2420) - at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372) - at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:517) - at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:434) - at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:194) - at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:137) - at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) - at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) - at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:246) - ... 219 common frames omitted -2025-10-29 15:20:59 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 15:20:59 [http-nio-8082-exec-6] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: 5c037d21-599d-4fa9-b712-3cdf676451c3, totalCount: 0 -2025-10-29 15:20:59 [http-nio-8082-exec-6] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:20:59 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 15:20:59 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 15:20:59 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:20:59 [http-nio-8082-exec-6] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 - minutesId: 5c037d21-599d-4fa9-b712-3cdf676451c3 -2025-10-29 15:20:59 [http-nio-8082-exec-6] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: 5c037d21-599d-4fa9-b712-3cdf676451c3 -2025-10-29 15:20:59 [http-nio-8082-exec-6] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 15:20:59 [http-nio-8082-exec-6] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=5c037d21-599d-4fa9-b712-3cdf676451c3 -2025-10-29 15:20:59 [http-nio-8082-exec-6] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:20:59 [http-nio-8082-exec-6] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:20:59 [http-nio-8082-exec-6] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=5c037d21-599d-4fa9-b712-3cdf676451c3 -2025-10-29 15:20:59 [http-nio-8082-exec-6] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: 5c037d21-599d-4fa9-b712-3cdf676451c3, meetingId: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:20:59 [http-nio-8082-exec-6] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: 5c037d21-599d-4fa9-b712-3cdf676451c3, meetingId: 603438ef-68d9-4498-9c54-bc3fe258b941 -2025-10-29 15:20:59 [http-nio-8082-exec-6] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: 5c037d21-599d-4fa9-b712-3cdf676451c3 -2025-10-29 15:20:59 [http-nio-8082-exec-6] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 1832ms -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/reserve -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/reserve -2025-10-29 15:23:30 [http-nio-8082-exec-9] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.createMeeting 호출 - 파라미터: [user-005, dohyunjung, dohyun.jung@example.com, com.unicorn.hgzero.meeting.infra.dto.request.CreateMeetingRequest@75bd2750] -2025-10-29 15:23:30 [http-nio-8082-exec-9] INFO c.u.h.m.i.c.MeetingController - 회의 예약 요청 - userId: user-005, title: 인터넷 일 상한 속도제어 개발협의 회의 -2025-10-29 15:23:30 [http-nio-8082-exec-9] INFO c.u.h.m.biz.service.MeetingService - Creating meeting: 인터넷 일 상한 속도제어 개발협의 회의 -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* SELECT - COUNT(m) - FROM - MeetingEntity m - WHERE - m.organizerId = :organizerId - AND m.status IN ('SCHEDULED', 'IN_PROGRESS') - AND ( - ( - m.scheduledAt < :endTime - AND m.endTime > :startTime - ) - ) */ select - count(me1_0.meeting_id) - from - meetings me1_0 - where - me1_0.organizer_id=? - and me1_0.status in ('SCHEDULED', 'IN_PROGRESS') - and ( - ( - me1_0.scheduled_at? - ) - ) -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at, - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meetings me1_0 - left join - meeting_participants p1_0 - on me1_0.meeting_id=p1_0.meeting_id - where - me1_0.meeting_id=? -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingEntity */insert - into - meetings (created_at, description, end_time, ended_at, location, organizer_id, purpose, scheduled_at, started_at, status, template_id, title, updated_at, meeting_id) - values - (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? - and mpe1_0.user_id=? - fetch - first ? rows only -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? - and mpe1_0.user_id=? - fetch - first ? rows only -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - ( - mpe1_0.meeting_id, mpe1_0.user_id - ) in ((?, ?)) -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - ( - mpe1_0.meeting_id, mpe1_0.user_id - ) in ((?, ?)) -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG c.u.h.m.i.gateway.ParticipantGateway - Participants saved: meetingId=62071c5c-0f01-4f65-a735-5bcbf27dc7ac, count=2 -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG c.u.h.m.biz.service.MeetingService - Participants saved: meetingId=62071c5c-0f01-4f65-a735-5bcbf27dc7ac, count=2 -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 저장 - meetingId: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG c.u.h.m.biz.service.MeetingService - Meeting cached: meetingId=62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:23:30 [http-nio-8082-exec-9] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=notification, type=NOTIFICATION_REQUEST, partitionKey=du0928@gmail.com -2025-10-29 15:23:30 [http-nio-8082-exec-9] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=notification, type=NOTIFICATION_REQUEST, partitionKey=daewoong.jeon@kt.com -2025-10-29 15:23:30 [http-nio-8082-exec-9] INFO c.u.h.m.i.e.p.EventHubPublisher - 회의 생성 알림 발행 완료 - meetingId: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac, participants count: 2 -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG c.u.h.m.biz.service.MeetingService - Meeting invitation events published: meetingId=62071c5c-0f01-4f65-a735-5bcbf27dc7ac, participants=2 -2025-10-29 15:23:30 [http-nio-8082-exec-9] INFO c.u.h.m.biz.service.MeetingService - Meeting created successfully: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:23:30 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingParticipantEntity */insert - into - meeting_participants (attended, created_at, invitation_status, updated_at, meeting_id, user_id) - values - (?, ?, ?, ?, ?, ?) -2025-10-29 15:23:31 [http-nio-8082-exec-9] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingParticipantEntity */insert - into - meeting_participants (attended, created_at, invitation_status, updated_at, meeting_id, user_id) - values - (?, ?, ?, ?, ?, ?) -2025-10-29 15:23:31 [http-nio-8082-exec-9] INFO c.u.h.m.i.c.MeetingController - 회의 예약 완료 - userId: user-005, meetingId: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:23:31 [http-nio-8082-exec-9] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.createMeeting 완료 - 실행시간: 681ms -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/62071c5c-0f01-4f65-a735-5bcbf27dc7ac/start -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/62071c5c-0f01-4f65-a735-5bcbf27dc7ac/start -2025-10-29 15:23:44 [http-nio-8082-exec-10] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.startMeeting 호출 - 파라미터: [62071c5c-0f01-4f65-a735-5bcbf27dc7ac, user-005, dohyunjung, dohyun.jung@example.com] -2025-10-29 15:23:44 [http-nio-8082-exec-10] INFO c.u.h.m.i.c.MeetingController - 회의 시작 요청 - meetingId: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac, userId: user-005 -2025-10-29 15:23:44 [http-nio-8082-exec-10] INFO c.u.h.m.biz.service.MeetingService - Starting meeting: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 조회 성공 - meetingId: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:23:44 [http-nio-8082-exec-10] WARN c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 조회 실패 (DB에서 조회) - meetingId: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac, 에러: Unrecognized field "inProgress" (class com.unicorn.hgzero.meeting.biz.domain.Meeting), not marked as ignorable (13 known properties: "scheduledAt", "endTime", "organizerId", "endedAt", "status", "startedAt", "location", "meetingId", "title", "description", "purpose", "participants", "templateId"]) - at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 428] (through reference chain: com.unicorn.hgzero.meeting.biz.domain.Meeting["inProgress"]) -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG c.u.h.m.biz.service.MeetingService - Cache miss for meeting: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG c.u.h.m.infra.cache.CacheService - 회의 정보 캐시 저장 - meetingId: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG org.hibernate.SQL - - select - se1_0.session_id, - se1_0.created_at, - se1_0.ended_at, - se1_0.meeting_id, - se1_0.minutes_id, - se1_0.started_at, - se1_0.started_by, - se1_0.status, - se1_0.updated_at - from - sessions se1_0 - where - se1_0.session_id=? -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG c.u.h.m.biz.service.MeetingService - Session created: sessionId=5998a048-2a46-46a4-ba10-bee51f64dd62, meetingId=62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG c.u.h.m.biz.service.MeetingService - Meeting status updated to IN_PROGRESS: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG c.u.h.m.infra.cache.CacheService - 캐시 삭제 - key: meeting:62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG c.u.h.m.biz.service.MeetingService - Meeting cache evicted: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version, - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes me1_0 - left join - minutes_sections s1_0 - on me1_0.minutes_id=s1_0.minutes_id - where - me1_0.minutes_id=? -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG c.u.h.m.biz.service.MeetingService - Minutes draft created: minutesId=30065ce5-2249-45bd-8be4-7c0df3372ad9, meetingId=62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:23:44 [http-nio-8082-exec-10] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=meeting, type=MEETING_STARTED, partitionKey=62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG c.u.h.m.biz.service.MeetingService - MeetingStarted event published: meetingId=62071c5c-0f01-4f65-a735-5bcbf27dc7ac, sessionId=5998a048-2a46-46a4-ba10-bee51f64dd62 -2025-10-29 15:23:44 [http-nio-8082-exec-10] INFO c.u.h.m.biz.service.MeetingService - Meeting started successfully: meetingId=62071c5c-0f01-4f65-a735-5bcbf27dc7ac, sessionId=5998a048-2a46-46a4-ba10-bee51f64dd62, minutesId=30065ce5-2249-45bd-8be4-7c0df3372ad9 -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.SessionEntity */insert - into - sessions (created_at, ended_at, meeting_id, minutes_id, started_at, started_by, status, updated_at, session_id) - values - (?, ?, ?, ?, ?, ?, ?, ?, ?) -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG org.hibernate.SQL - - /* insert for - com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */insert - into - minutes (created_at, created_by, finalized_at, finalized_by, meeting_id, status, title, updated_at, version, minutes_id) - values - (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingEntity */update meetings - set - description=?, - end_time=?, - ended_at=?, - location=?, - organizer_id=?, - purpose=?, - scheduled_at=?, - started_at=?, - status=?, - template_id=?, - title=?, - updated_at=? - where - meeting_id=? -2025-10-29 15:23:44 [http-nio-8082-exec-10] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.SessionEntity */update sessions - set - ended_at=?, - meeting_id=?, - minutes_id=?, - started_at=?, - started_by=?, - status=?, - updated_at=? - where - session_id=? -2025-10-29 15:23:44 [http-nio-8082-exec-10] INFO c.u.h.m.i.c.MeetingController - 회의 시작 완료 - meetingId: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac, sessionId: 5998a048-2a46-46a4-ba10-bee51f64dd62 -2025-10-29 15:23:44 [http-nio-8082-exec-10] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.startMeeting 완료 - 실행시간: 772ms -2025-10-29 15:24:44 [reactor-executor-3] WARN c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onTransportError","connectionId":"MF_71f49f_1761717989872","errorCondition":"amqp:connection:framing-error","errorDescription":"connection aborted","hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_71f49f_1761717989872","isTransient":false,"isInitiatedByClient":false,"shutdownMessage":"connection aborted, errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A]"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionUnbound","connectionId":"MF_71f49f_1761717989872","hostName":"hgzero-eventhub-ns.servicebus.windows.net","state":"CLOSED","remoteState":"ACTIVE"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkFinal","connectionId":"MF_71f49f_1761717989872","linkName":"hgzero-eventhub-name","entityPath":"hgzero-eventhub-name"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionFinal.","connectionId":"MF_71f49f_1761717989872","errorCondition":null,"errorDescription":null,"sessionName":"hgzero-eventhub-name"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkFinal","connectionId":"MF_71f49f_1761717989872","linkName":"cbs:sender","entityPath":"$cbs"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkFinal","connectionId":"MF_71f49f_1761717989872","linkName":"cbs:receiver","entityPath":"$cbs"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is closed. Requesting upstream.","connectionId":"MF_71f49f_1761717989872","entityPath":"$cbs"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Connection not requested, yet. Requesting one.","connectionId":"MF_71f49f_1761717989872","entityPath":"$cbs"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Emitting new response channel.","connectionId":"MF_71f49f_1761717989872","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Setting next AMQP channel.","connectionId":"MF_71f49f_1761717989872","entityPath":"$cbs"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Upstream connection publisher was completed. Terminating processor.","connectionId":"MF_71f49f_1761717989872","entityPath":"$cbs"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionFinal.","connectionId":"MF_71f49f_1761717989872","errorCondition":null,"errorDescription":null,"sessionName":"cbs-session"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionFinal","connectionId":"MF_71f49f_1761717989872","errorCondition":"amqp:resource-limit-exceeded","errorDescription":"local-idle-timeout expired","hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Closing executor.","connectionId":"MF_71f49f_1761717989872"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"Sender link was never active. Closing endpoint states.","connectionId":"MF_71f49f_1761717989872","linkName":"cbs","entityPath":"$cbs"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"Receiver link was never active. Closing endpoint states","connectionId":"MF_71f49f_1761717989872","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is disposed.","connectionId":"MF_71f49f_1761717989872","entityPath":"$cbs"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onTransportClosed","connectionId":"MF_71f49f_1761717989872","errorCondition":"amqp:connection:framing-error","errorDescription":"connection aborted","hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:24:44 [reactor-executor-3] WARN c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Unhandled exception while processing events in reactor, report this error.","exception":"java.lang.IllegalStateException","connectionId":"MF_71f49f_1761717989872"} -2025-10-29 15:24:44 [reactor-executor-3] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"onConnectionError, Starting new reactor","exception":"java.lang.IllegalStateException, TrackingId: 21bd802c-c2b2-4b3c-890e-216dff85a739, at: 2025-10-29T15:24:44.661249+09:00[Asia/Seoul], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A]","connectionId":"MF_71f49f_1761717989872","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:24:48 [reactor-executor-3] INFO c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Processing all pending tasks and closing old reactor.","connectionId":"MF_71f49f_1761717989872"} -2025-10-29 15:24:48 [reactor-executor-3] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onTransportClosed","connectionId":"MF_71f49f_1761717989872","errorCondition":"amqp:connection:framing-error","errorDescription":"connection aborted","hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:24:48 [reactor-executor-3] WARN c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"scheduleCompletePendingTasks - exception occurred while processing events.\njava.lang.IllegalStateException\norg.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:112)\norg.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:324)\norg.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:292)\ncom.azure.core.amqp.implementation.ReactorExecutor.lambda$scheduleCompletePendingTasks$1(ReactorExecutor.java:158)\nreactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68)\nreactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28)\njava.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)\njava.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)\njava.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)\njava.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)\njava.base/java.lang.Thread.run(Thread.java:1583)Cause: null\norg.apache.qpid.proton.engine.impl.EndpointImpl.decref(EndpointImpl.java:54)\norg.apache.qpid.proton.engine.impl.TransportImpl.unbind(TransportImpl.java:315)\norg.apache.qpid.proton.reactor.impl.IOHandler.onUnhandled(IOHandler.java:387)\norg.apache.qpid.proton.engine.BaseHandler.onTransportClosed(BaseHandler.java:84)\norg.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:200)\norg.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108)\norg.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:324)\norg.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:292)\ncom.azure.core.amqp.implementation.ReactorExecutor.lambda$scheduleCompletePendingTasks$1(ReactorExecutor.java:158)\nreactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68)\nreactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28)\njava.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)\njava.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)\njava.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)\njava.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)\njava.base/java.lang.Thread.run(Thread.java:1583)","connectionId":"MF_71f49f_1761717989872"} -2025-10-29 15:24:48 [reactor-executor-3] INFO c.a.c.a.i.ReactorDispatcher - {"az.sdk.message":"Reactor selectable is being disposed.","connectionId":"MF_71f49f_1761717989872"} -2025-10-29 15:24:48 [reactor-executor-3] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"onConnectionShutdown. Shutting down.","connectionId":"MF_71f49f_1761717989872","isTransient":false,"isInitiatedByClient":false,"shutdownMessage":"connectionId[MF_71f49f_1761717989872] Reactor selectable is disposed.","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:24:48 [reactor-executor-3] ERROR reactor.core.publisher.Operators - Operator called default onErrorDropped -reactor.core.Exceptions$ErrorCallbackNotImplemented: com.azure.core.amqp.exception.AmqpException: connection aborted, errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A] -Caused by: com.azure.core.amqp.exception.AmqpException: connection aborted, errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A] - at com.azure.core.amqp.implementation.ExceptionUtil.toException(ExceptionUtil.java:85) - at com.azure.core.amqp.implementation.handler.ConnectionHandler.notifyErrorContext(ConnectionHandler.java:351) - at com.azure.core.amqp.implementation.handler.ConnectionHandler.onTransportError(ConnectionHandler.java:253) - at org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:191) - at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:324) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:291) - at com.azure.core.amqp.implementation.ReactorExecutor.run(ReactorExecutor.java:91) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 15:24:48 [reactor-executor-3] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Transient error occurred. Retrying.","exception":"connection aborted, errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A]","entityPath":"hgzero-eventhub-name","tryCount":0,"interval_ms":4511} -2025-10-29 15:24:48 [reactor-executor-3] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"onConnectionShutdown. Shutting down.","connectionId":"MF_71f49f_1761717989872","isTransient":false,"isInitiatedByClient":false,"shutdownMessage":"Finished processing pending tasks.","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:24:53 [parallel-2] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Requesting from upstream.","entityPath":"hgzero-eventhub-name","tryCount":0} -2025-10-29 15:24:53 [parallel-2] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Connection not requested, yet. Requesting one.","entityPath":"hgzero-eventhub-name"} -2025-10-29 15:24:53 [parallel-2] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_3cbcb8_1761719093187"} -2025-10-29 15:24:53 [parallel-2] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"} -2025-10-29 15:25:13 [http-nio-8082-exec-3] DEBUG o.s.security.web.FilterChainProxy - Securing POST /api/meetings/minutes/30065ce5-2249-45bd-8be4-7c0df3372ad9/finalize -2025-10-29 15:25:13 [http-nio-8082-exec-3] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: dohyunjung (user-005) -2025-10-29 15:25:13 [http-nio-8082-exec-3] DEBUG o.s.security.web.FilterChainProxy - Secured POST /api/meetings/minutes/30065ce5-2249-45bd-8be4-7c0df3372ad9/finalize -2025-10-29 15:25:13 [http-nio-8082-exec-3] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 호출 - 파라미터: [user-005, dohyunjung, 30065ce5-2249-45bd-8be4-7c0df3372ad9] -2025-10-29 15:25:13 [http-nio-8082-exec-3] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 요청 - userId: user-005, minutesId: 30065ce5-2249-45bd-8be4-7c0df3372ad9 -2025-10-29 15:25:13 [http-nio-8082-exec-3] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: 30065ce5-2249-45bd-8be4-7c0df3372ad9 -2025-10-29 15:25:13 [http-nio-8082-exec-3] INFO c.u.h.m.biz.service.MinutesService - Finalizing minutes: 30065ce5-2249-45bd-8be4-7c0df3372ad9 by user: user-005 -2025-10-29 15:25:13 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 15:25:13 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - select - s1_0.minutes_id, - s1_0.id, - s1_0.content, - s1_0.created_at, - s1_0.locked, - s1_0.locked_by, - s1_0."order", - s1_0.title, - s1_0.type, - s1_0.updated_at, - s1_0.verified - from - minutes_sections s1_0 - where - s1_0.minutes_id=? -2025-10-29 15:25:13 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0."order", - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0."order" -2025-10-29 15:25:14 [http-nio-8082-exec-3] INFO c.u.h.m.biz.service.MinutesService - Minutes finalized successfully: 30065ce5-2249-45bd-8be4-7c0df3372ad9, version: 2 -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity */update minutes - set - created_by=?, - finalized_at=?, - finalized_by=?, - meeting_id=?, - status=?, - title=?, - updated_at=?, - version=? - where - minutes_id=? -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesSectionEntity */update minutes_sections - set - content=?, - locked=?, - locked_by=?, - minutes_id=?, - "order"=?, - title=?, - type=?, - updated_at=?, - verified=? - where - id=? -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesSectionEntity */update minutes_sections - set - content=?, - locked=?, - locked_by=?, - minutes_id=?, - "order"=?, - title=?, - type=?, - updated_at=?, - verified=? - where - id=? -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* update - for com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesSectionEntity */update minutes_sections - set - content=?, - locked=?, - locked_by=?, - minutes_id=?, - "order"=?, - title=?, - type=?, - updated_at=?, - verified=? - where - id=? -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:25:14 [http-nio-8082-exec-3] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: 30065ce5-2249-45bd-8be4-7c0df3372ad9 -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.decisions, - ase1_0.discussions, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.opinions, - ase1_0.pending_items, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 15:25:14 [http-nio-8082-exec-3] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 42703 -2025-10-29 15:25:14 [http-nio-8082-exec-3] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - ERROR: column ase1_0.decisions does not exist - Position: 118 -2025-10-29 15:25:14 [http-nio-8082-exec-3] ERROR c.u.hgzero.common.aop.LoggingAspect - [Service] com.unicorn.hgzero.meeting.biz.service.AgendaSectionService.getAgendaSectionsByMinutesId 실패 - 실행시간: 30ms, 에러: JDBC exception executing SQL [/* */ select ase1_0.id,ase1_0.agenda_number,ase1_0.agenda_title,ase1_0.ai_summary_short,ase1_0.created_at,ase1_0.decisions,ase1_0.discussions,ase1_0.meeting_id,ase1_0.minutes_id,ase1_0.opinions,ase1_0.pending_items,ase1_0.todos,ase1_0.updated_at from agenda_sections ase1_0 where ase1_0.minutes_id=? order by ase1_0.agenda_number] [ERROR: column ase1_0.decisions does not exist - Position: 118] [n/a]; SQL [n/a] -2025-10-29 15:25:14 [http-nio-8082-exec-3] ERROR c.u.h.m.i.c.MinutesController - 안건 정보 조회 실패 - minutesId: 30065ce5-2249-45bd-8be4-7c0df3372ad9 -org.springframework.dao.InvalidDataAccessResourceUsageException: JDBC exception executing SQL [/* */ select ase1_0.id,ase1_0.agenda_number,ase1_0.agenda_title,ase1_0.ai_summary_short,ase1_0.created_at,ase1_0.decisions,ase1_0.discussions,ase1_0.meeting_id,ase1_0.minutes_id,ase1_0.opinions,ase1_0.pending_items,ase1_0.todos,ase1_0.updated_at from agenda_sections ase1_0 where ase1_0.minutes_id=? order by ase1_0.agenda_number] [ERROR: column ase1_0.decisions does not exist - Position: 118] [n/a]; SQL [n/a] - at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:277) - at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:241) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:550) - at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) - at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:335) - at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:160) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:136) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) - at jdk.proxy2/jdk.proxy2.$Proxy174.findByMinutesIdOrderByAgendaNumber(Unknown Source) - at com.unicorn.hgzero.meeting.biz.service.AgendaSectionService.getAgendaSectionsByMinutesId(AgendaSectionService.java:33) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) - at com.unicorn.hgzero.common.aop.LoggingAspect.logService(LoggingAspect.java:86) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627) - at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) - at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) - at com.unicorn.hgzero.meeting.biz.service.AgendaSectionService$$SpringCGLIB$$0.getAgendaSectionsByMinutesId() - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.buildAgendaInfoList(MinutesController.java:755) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.convertToMinutesDetailResponse(MinutesController.java:620) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes(MinutesController.java:240) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) - at com.unicorn.hgzero.common.aop.LoggingAspect.logController(LoggingAspect.java:56) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627) - at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController$$SpringCGLIB$$0.finalizeMinutes() - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) - at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) - at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340) - at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128) - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at com.unicorn.hgzero.meeting.infra.config.jwt.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.base/java.lang.Thread.run(Thread.java:1583) -Caused by: org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [/* */ select ase1_0.id,ase1_0.agenda_number,ase1_0.agenda_title,ase1_0.ai_summary_short,ase1_0.created_at,ase1_0.decisions,ase1_0.discussions,ase1_0.meeting_id,ase1_0.minutes_id,ase1_0.opinions,ase1_0.pending_items,ase1_0.todos,ase1_0.updated_at from agenda_sections ase1_0 where ase1_0.minutes_id=? order by ase1_0.agenda_number] [ERROR: column ase1_0.decisions does not exist - Position: 118] [n/a] - at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:91) - at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:58) - at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) - at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94) - at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:264) - at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.getResultSet(DeferredResultSetAccess.java:167) - at org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.advanceNext(JdbcValuesResultSetImpl.java:265) - at org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.processNext(JdbcValuesResultSetImpl.java:145) - at org.hibernate.sql.results.jdbc.internal.AbstractJdbcValues.next(AbstractJdbcValues.java:19) - at org.hibernate.sql.results.internal.RowProcessingStateStandardImpl.next(RowProcessingStateStandardImpl.java:67) - at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:204) - at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:33) - at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:211) - at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:83) - at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:76) - at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:65) - at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.lambda$new$2(ConcreteSqmSelectQueryPlan.java:139) - at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:382) - at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:302) - at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:526) - at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:423) - at org.hibernate.query.Query.getResultList(Query.java:120) - at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:129) - at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:92) - at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:152) - at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:140) - at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170) - at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) - at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:169) - at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:148) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:70) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) - at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138) - ... 187 common frames omitted -Caused by: org.postgresql.util.PSQLException: ERROR: column ase1_0.decisions does not exist - Position: 118 - at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733) - at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2420) - at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372) - at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:517) - at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:434) - at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:194) - at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:137) - at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) - at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) - at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:246) - ... 219 common frames omitted -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 15:25:14 [http-nio-8082-exec-3] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: 30065ce5-2249-45bd-8be4-7c0df3372ad9, totalCount: 0 -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:25:14 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 15:25:15 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 15:25:15 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:25:15 [http-nio-8082-exec-3] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 - minutesId: 30065ce5-2249-45bd-8be4-7c0df3372ad9 -2025-10-29 15:25:15 [http-nio-8082-exec-3] DEBUG c.u.h.m.i.c.MinutesController - 캐시에 확정된 회의록 저장 완료 - minutesId: 30065ce5-2249-45bd-8be4-7c0df3372ad9 -2025-10-29 15:25:15 [http-nio-8082-exec-3] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 목록 캐시 삭제 - userId: user-005 -2025-10-29 15:25:15 [http-nio-8082-exec-3] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Creating and starting connection.","connectionId":"MF_3cbcb8_1761719093187","hostName":"hgzero-eventhub-ns.servicebus.windows.net","port":5671} -2025-10-29 15:25:15 [http-nio-8082-exec-3] INFO c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Starting reactor.","connectionId":"MF_3cbcb8_1761719093187"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionInit","connectionId":"MF_3cbcb8_1761719093187","hostName":"hgzero-eventhub-ns.servicebus.windows.net","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.handler.ReactorHandler - {"az.sdk.message":"reactor.onReactorInit","connectionId":"MF_3cbcb8_1761719093187"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalOpen","connectionId":"MF_3cbcb8_1761719093187","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionBound","connectionId":"MF_3cbcb8_1761719093187","hostName":"hgzero-eventhub-ns.servicebus.windows.net","peerDetails":"hgzero-eventhub-ns.servicebus.windows.net:5671"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteOpen","connectionId":"MF_3cbcb8_1761719093187","hostName":"hgzero-eventhub-ns.servicebus.windows.net","remoteContainer":"981ecbc9cad64c2380fd6bc6774fe004_G8"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is now active.","entityPath":"hgzero-eventhub-name"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_3cbcb8_1761719093187","sessionName":"hgzero-eventhub-name","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Setting CBS channel.","connectionId":"MF_3cbcb8_1761719093187"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_3cbcb8_1761719093187","sessionName":"cbs-session","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Emitting new response channel.","connectionId":"MF_3cbcb8_1761719093187","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Setting next AMQP channel.","connectionId":"MF_3cbcb8_1761719093187","entityPath":"$cbs"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Next AMQP channel received.","connectionId":"MF_3cbcb8_1761719093187","entityPath":"$cbs","subscriberId":"un_118f6c_1761719115522"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_3cbcb8_1761719093187","linkName":"cbs:sender","entityPath":"$cbs","remoteTarget":"Target{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is now active.","connectionId":"MF_3cbcb8_1761719093187","entityPath":"$cbs"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_3cbcb8_1761719093187","entityPath":"$cbs","linkName":"cbs:receiver","remoteSource":"Source{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, distributionMode=null, filter=null, defaultOutcome=null, outcomes=null, capabilities=null}"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.ActiveClientTokenManager - {"az.sdk.message":"Scheduling refresh token task.","scopes":"amqp://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-name"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.ReactorSession - {"az.sdk.message":"Creating a new send link.","connectionId":"MF_3cbcb8_1761719093187","linkName":"hgzero-eventhub-name","sessionName":"hgzero-eventhub-name"} -2025-10-29 15:25:15 [reactor-executor-4] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_3cbcb8_1761719093187","linkName":"hgzero-eventhub-name","entityPath":"hgzero-eventhub-name","remoteTarget":"Target{address='hgzero-eventhub-name', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 15:25:15 [http-nio-8082-exec-3] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=30065ce5-2249-45bd-8be4-7c0df3372ad9 -2025-10-29 15:25:15 [http-nio-8082-exec-3] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:25:15 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 15:25:15 [http-nio-8082-exec-3] INFO c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 완료: topic=minutes, type=MINUTES_FINALIZED, partitionKey=30065ce5-2249-45bd-8be4-7c0df3372ad9 -2025-10-29 15:25:15 [http-nio-8082-exec-3] INFO c.u.h.m.i.e.p.EventHubPublisher - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: 30065ce5-2249-45bd-8be4-7c0df3372ad9, meetingId: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:25:15 [http-nio-8082-exec-3] INFO c.u.h.m.i.c.MinutesController - RAG용 회의록 확정 이벤트 발행 완료 - minutesId: 30065ce5-2249-45bd-8be4-7c0df3372ad9, meetingId: 62071c5c-0f01-4f65-a735-5bcbf27dc7ac -2025-10-29 15:25:15 [http-nio-8082-exec-3] INFO c.u.h.m.i.c.MinutesController - 회의록 확정 성공 - minutesId: 30065ce5-2249-45bd-8be4-7c0df3372ad9 -2025-10-29 15:25:15 [http-nio-8082-exec-3] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.finalizeMinutes 완료 - 실행시간: 2062ms -2025-10-29 16:40:16 [main] INFO c.u.h.meeting.MeetingApplication - Starting MeetingApplication using Java 21.0.8 with PID 96302 (/Users/adela/home/workspace/recent/HGZero/meeting/build/classes/java/main started by adela in /Users/adela/home/workspace/recent/HGZero/meeting) -2025-10-29 16:40:16 [main] DEBUG c.u.h.meeting.MeetingApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 -2025-10-29 16:40:16 [main] INFO c.u.h.meeting.MeetingApplication - The following 1 profile is active: "dev" -2025-10-29 16:40:16 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 16:40:16 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-10-29 16:40:16 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 80 ms. Found 10 JPA repository interfaces. -2025-10-29 16:40:17 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 16:40:17 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2025-10-29 16:40:17 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.AgendaSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:40:17 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.AgendaSectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:40:17 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingAnalysisJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:40:17 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:40:17 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingParticipantJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:40:17 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:40:17 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:40:17 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.SessionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:40:17 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TemplateJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:40:17 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TodoJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:40:17 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 21 ms. Found 0 Redis repository interfaces. -2025-10-29 16:40:17 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8082 (http) -2025-10-29 16:40:17 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-10-29 16:40:17 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] -2025-10-29 16:40:17 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-10-29 16:40:17 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1199 ms -2025-10-29 16:40:17 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-10-29 16:40:17 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final -2025-10-29 16:40:17 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@104cfb24 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@104cfb24 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@104cfb24 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@5340ccb9 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@5340ccb9 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@2bc8caa7 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@2bc8caa7 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@582ea164 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@582ea164 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@2fccf49e -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@2fccf49e -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@2fccf49e -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@7abcc0da -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@7abcc0da -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@7abcc0da -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@174cb0d8 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@174cb0d8 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@3ac406d4 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@72646d16 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@72646d16 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@6ec2d990 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@1cfa7ee0 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@612290d -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@612290d -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@612290d -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@57cff804 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@57cff804 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@57cff804 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@2f39b534 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@2f39b534 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@2f39b534 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@60fbc34d -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@60fbc34d -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@60fbc34d -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@7736c41e -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@7736c41e -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@7736c41e -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@5f911d24 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@5f911d24 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@3de383f7 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@3de383f7 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@33ccead -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@33ccead -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@33ccead -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@42ebece0 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@15c4b1a4 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@15c4b1a4 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@341964d0 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@51b59d58 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@51b59d58 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@51b59d58 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@4ca4f762 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@7c5d36c3 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@31de27c -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@7ebfe01a -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@7ebfe01a -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@154b0748 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@154b0748 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@35c00c -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@6cd7dc74 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@6d695ec4 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@20556566 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@e4ef4c0 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@5ca8bd01 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@7b10472e -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@7b10472e -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@70e5737f -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@70e5737f -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@9746157 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@9746157 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@10ad95cd -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@10ad95cd -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@69fd99c1 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@69fd99c1 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@32d8710a -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@180cc0df -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@64f33dee -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@64f33dee -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@61c58320 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@10e4ee33 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@6e90cec8 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@13f182b9 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@13f182b9 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@5ee0cf64 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@69c227fd -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@14c5283 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@14c5283 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@1eb7ec59 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@1eb7ec59 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@46748b04 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@46748b04 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@46748b04 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@3e71a1f8 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@3e71a1f8 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@3e71a1f8 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@5d4a34ff -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@7cbede2b -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@1ef04613 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@1ef04613 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@2d3d4a54 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@2d3d4a54 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@2d3d4a54 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@215c6ec0 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@2b19b346 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@37c5b8e8 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@37c5b8e8 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@706d2bae -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@706d2bae -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@706d2bae -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@3205610d -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@3205610d -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@54e06788 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@54e06788 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@4e789704 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@4e789704 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@5751e53e -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@5751e53e -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@4e45fbd0 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@4e45fbd0 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@19ce19b7 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@13047d3d -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@43719e98 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@43719e98 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@6aa9a93b -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@81dfdee -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@3b046e64 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@1c43e84e -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@7bd694a5 -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@21ce2e4d -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@3921135e -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@3a239dac -2025-10-29 16:40:17 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@759f45f1 -2025-10-29 16:40:17 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer -2025-10-29 16:40:17 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [hibernate.temp.use_jdbc_metadata_defaults], use [hibernate.boot.allow_jdbc_metadata_access] instead -2025-10-29 16:40:18 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2025-10-29 16:40:18 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@58932d08) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@45648e75) -2025-10-29 16:40:18 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@e344f14) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@2d117280) -2025-10-29 16:40:18 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) -2025-10-29 16:40:18 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@2f3a0f37 -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@2f3a0f37 -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@43719e98` -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 16:40:18 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 16:40:18 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@2a2b3aff] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@4bc9451b] -2025-10-29 16:40:18 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 16:40:18 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 16:40:18 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2025-10-29 16:40:18 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@2a2b3aff] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@555454c7] -2025-10-29 16:40:18 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 16:40:18 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 16:40:18 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@555454c7] for TypeConfiguration -2025-10-29 16:40:18 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 16:40:18 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. -2025-10-29 16:40:19 [main] INFO c.u.h.m.infra.cache.CacheConfig - ObjectMapper 설정 완료 -2025-10-29 16:40:19 [main] INFO c.u.h.m.infra.config.RedisConfig - Redis Lettuce Client 설정 완료 - Standalone 모드 (Master-Replica 자동 탐색 비활성화) -2025-10-29 16:40:19 [main] INFO c.u.h.m.infra.config.RedisConfig - LettuceConnectionFactory 설정 완료 - Host: 20.249.177.114:6379, Database: 1 -2025-10-29 16:40:19 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library -2025-10-29 16:40:19 [main] INFO c.u.h.m.infra.config.RedisConfig - RedisTemplate 설정 완료 -2025-10-29 16:40:19 [main] INFO c.u.h.m.infra.config.EventHubConfig - Initializing Azure EventHub configuration with hub name: hgzero-eventhub-name -2025-10-29 16:40:19 [main] INFO c.u.h.m.infra.config.EventHubConfig - Creating EventHub producer for hub: hgzero-eventhub-name -2025-10-29 16:40:19 [main] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_1b7a37_1761723619589"} -2025-10-29 16:40:19 [main] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"} -2025-10-29 16:40:19 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-10-29 16:40:19 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - - -Using generated security password: 3fa9c460-2277-4658-88c1-59a30b215531 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2025-10-29 16:40:19 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2025-10-29 16:40:19 [main] INFO c.u.h.m.infra.config.WebSocketConfig - WebSocket 핸들러 등록 완료 - endpoint: /ws/minutes/{minutesId} -2025-10-29 16:40:20 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' -2025-10-29 16:40:20 [main] DEBUG o.s.s.web.DefaultSecurityFilterChain - Will secure any request with filters: DisableEncodeUrlFilter, WebAsyncManagerIntegrationFilter, SecurityContextHolderFilter, HeaderWriterFilter, CorsFilter, LogoutFilter, JwtAuthenticationFilter, RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter, AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, AuthorizationFilter -2025-10-29 16:40:20 [main] WARN o.s.b.a.t.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration - Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false) -2025-10-29 16:40:20 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8082 (http) with context path '/' -2025-10-29 16:40:20 [main] INFO c.u.h.meeting.MeetingApplication - Started MeetingApplication in 4.484 seconds (process running for 4.669) -2025-10-29 16:41:07 [http-nio-8082-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-10-29 16:41:07 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-10-29 16:41:07 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 4 ms -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Securing GET /api/meetings/minutes/minutes-user2 -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: user-002 (user-002) -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Secured GET /api/meetings/minutes/minutes-user2 -2025-10-29 16:41:07 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.getMinutesDetail 호출 - 파라미터: [user-002, user-002, minutes-user2] -2025-10-29 16:41:07 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - 회의록 상세 조회 요청 - userId: user-002, minutesId: minutes-user2 -2025-10-29 16:41:07 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-10-29 16:41:07 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@619cf5ca -2025-10-29 16:41:07 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MinutesService - Getting minutes DTO by id: minutes-user2 -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - me1_0.minutes_id, - me1_0.created_at, - me1_0.created_by, - me1_0.decisions, - me1_0.finalized_at, - me1_0.finalized_by, - me1_0.meeting_id, - me1_0.status, - me1_0.title, - me1_0.updated_at, - me1_0.user_id, - me1_0.version - from - minutes me1_0 - where - me1_0.minutes_id=? -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - me1_0.meeting_id, - me1_0.created_at, - me1_0.description, - me1_0.end_time, - me1_0.ended_at, - me1_0.location, - me1_0.organizer_id, - me1_0.purpose, - me1_0.scheduled_at, - me1_0.started_at, - me1_0.status, - me1_0.template_id, - me1_0.title, - me1_0.updated_at - from - meetings me1_0 - where - me1_0.meeting_id=? -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - p1_0.meeting_id, - p1_0.user_id, - p1_0.attended, - p1_0.created_at, - p1_0.invitation_status, - p1_0.updated_at - from - meeting_participants p1_0 - where - p1_0.meeting_id=? -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - count(*) - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0.order, - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0.order -2025-10-29 16:41:07 [http-nio-8082-exec-1] INFO c.u.h.m.biz.service.MinutesService - Minutes decisions 값 확인 - minutesId: minutes-user2, decisions: 결정사항 테스트으으으으 -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: meeting-123 -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 16:41:07 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - 참석자가 없습니다 - meetingId: meeting-123 -2025-10-29 16:41:07 [http-nio-8082-exec-1] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 목록 조회 - minutesId: minutes-user2 -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.pending_items, - ase1_0.summary, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.minutes_id=? - order by - ase1_0.agenda_number -2025-10-29 16:41:07 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - te1_0.todo_id, - te1_0.assignee_id, - te1_0.completed_at, - te1_0.created_at, - te1_0.description, - te1_0.due_date, - te1_0.meeting_id, - te1_0.minutes_id, - te1_0.priority, - te1_0.status, - te1_0.title, - te1_0.updated_at - from - todos te1_0 - where - te1_0.minutes_id=? -2025-10-29 16:41:08 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - Todo 조회 성공 - minutesId: minutes-user2, totalCount: 1 -2025-10-29 16:41:08 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: meeting-123 -2025-10-29 16:41:08 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* */ select - mpe1_0.meeting_id, - mpe1_0.user_id, - mpe1_0.attended, - mpe1_0.created_at, - mpe1_0.invitation_status, - mpe1_0.updated_at - from - meeting_participants mpe1_0 - where - mpe1_0.meeting_id=? -2025-10-29 16:41:08 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - Dashboard decisions 값 확인 - minutesId: minutes-user2, decisions: 결정사항 테스트으으으으 -2025-10-29 16:41:08 [http-nio-8082-exec-1] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: minutes-user2 -2025-10-29 16:41:08 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0.order, - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0.order -2025-10-29 16:41:08 [http-nio-8082-exec-1] DEBUG c.u.h.m.i.gateway.AiServiceGateway - AI 분석 결과 캐시 미스, AI 서비스 호출 - minutesId: minutes-user2 -2025-10-29 16:41:08 [http-nio-8082-exec-1] ERROR c.u.h.m.i.gateway.AiServiceGateway - AI 서비스 호출 실패 - minutesId: minutes-user2, error: I/O error on POST request for "http://ai:8080/api/v1/analysis/minutes": ai -org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://ai:8080/api/v1/analysis/minutes": ai - at org.springframework.web.client.RestTemplate.createResourceAccessException(RestTemplate.java:915) - at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:895) - at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:790) - at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:672) - at com.unicorn.hgzero.meeting.infra.gateway.AiServiceGateway.requestAiAnalysis(AiServiceGateway.java:107) - at com.unicorn.hgzero.meeting.infra.gateway.AiServiceGateway.getAiAnalysis(AiServiceGateway.java:51) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.enhanceWithAiAnalysis(MinutesController.java:1103) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.getMinutesDetail(MinutesController.java:170) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) - at com.unicorn.hgzero.common.aop.LoggingAspect.logController(LoggingAspect.java:56) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627) - at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController$$SpringCGLIB$$0.getMinutesDetail() - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) - at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) - at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340) - at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128) - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at com.unicorn.hgzero.meeting.infra.config.jwt.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.base/java.lang.Thread.run(Thread.java:1583) -Caused by: java.net.UnknownHostException: ai - at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:567) - at java.base/java.net.Socket.connect(Socket.java:751) - at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:178) - at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:531) - at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:636) - at java.base/sun.net.www.http.HttpClient.(HttpClient.java:282) - at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:386) - at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:408) - at java.base/sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1320) - at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1253) - at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1139) - at java.base/sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:1068) - at org.springframework.http.client.SimpleClientHttpRequest.executeInternal(SimpleClientHttpRequest.java:79) - at org.springframework.http.client.AbstractStreamingClientHttpRequest.executeInternal(AbstractStreamingClientHttpRequest.java:70) - at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66) - at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:889) - ... 158 common frames omitted -2025-10-29 16:41:08 [http-nio-8082-exec-1] DEBUG c.u.h.m.b.s.MinutesSectionService - Getting sections by minutes: minutes-user2 -2025-10-29 16:41:08 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* SELECT - m - FROM - MinutesSectionEntity m - WHERE - m.minutesId = :minutesId - ORDER BY - m.order ASC */ select - mse1_0.id, - mse1_0.content, - mse1_0.created_at, - mse1_0.locked, - mse1_0.locked_by, - mse1_0.minutes_id, - mse1_0.order, - mse1_0.title, - mse1_0.type, - mse1_0.updated_at, - mse1_0.verified - from - minutes_sections mse1_0 - where - mse1_0.minutes_id=? - order by - mse1_0.order -2025-10-29 16:41:08 [http-nio-8082-exec-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Creating and starting connection.","connectionId":"MF_1b7a37_1761723619589","hostName":"hgzero-eventhub-ns.servicebus.windows.net","port":5671} -2025-10-29 16:41:08 [http-nio-8082-exec-1] INFO c.a.c.a.i.ReactorExecutor - {"az.sdk.message":"Starting reactor.","connectionId":"MF_1b7a37_1761723619589"} -2025-10-29 16:41:08 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionInit","connectionId":"MF_1b7a37_1761723619589","hostName":"hgzero-eventhub-ns.servicebus.windows.net","namespace":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 16:41:08 [reactor-executor-1] INFO c.a.c.a.i.handler.ReactorHandler - {"az.sdk.message":"reactor.onReactorInit","connectionId":"MF_1b7a37_1761723619589"} -2025-10-29 16:41:08 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalOpen","connectionId":"MF_1b7a37_1761723619589","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 16:41:08 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionBound","connectionId":"MF_1b7a37_1761723619589","hostName":"hgzero-eventhub-ns.servicebus.windows.net","peerDetails":"hgzero-eventhub-ns.servicebus.windows.net:5671"} -2025-10-29 16:41:09 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteOpen","connectionId":"MF_1b7a37_1761723619589","hostName":"hgzero-eventhub-ns.servicebus.windows.net","remoteContainer":"935b336afa904514a926dae4b51a14cc_G5"} -2025-10-29 16:41:09 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is now active.","entityPath":"hgzero-eventhub-name"} -2025-10-29 16:41:09 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_1b7a37_1761723619589","sessionName":"hgzero-eventhub-name","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 16:41:09 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Setting CBS channel.","connectionId":"MF_1b7a37_1761723619589"} -2025-10-29 16:41:09 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteOpen","connectionId":"MF_1b7a37_1761723619589","sessionName":"cbs-session","sessionIncCapacity":0,"sessionOutgoingWindow":2147483647} -2025-10-29 16:41:09 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Emitting new response channel.","connectionId":"MF_1b7a37_1761723619589","entityPath":"$cbs","linkName":"cbs"} -2025-10-29 16:41:09 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Setting next AMQP channel.","connectionId":"MF_1b7a37_1761723619589","entityPath":"$cbs"} -2025-10-29 16:41:09 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Next AMQP channel received.","connectionId":"MF_1b7a37_1761723619589","entityPath":"$cbs","subscriberId":"un_1e62d4_1761723669799"} -2025-10-29 16:41:09 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_1b7a37_1761723619589","linkName":"cbs:sender","entityPath":"$cbs","remoteTarget":"Target{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, capabilities=null}"} -2025-10-29 16:41:09 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Channel is now active.","connectionId":"MF_1b7a37_1761723619589","entityPath":"$cbs"} -2025-10-29 16:41:09 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteOpen","connectionId":"MF_1b7a37_1761723619589","entityPath":"$cbs","linkName":"cbs:receiver","remoteSource":"Source{address='$cbs', durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, dynamicNodeProperties=null, distributionMode=null, filter=null, defaultOutcome=null, outcomes=null, capabilities=null}"} -2025-10-29 16:41:09 [http-nio-8082-exec-1] ERROR c.u.h.m.i.e.p.EventHubPublisher - 이벤트 발행 실패: topic=ai-analysis, type=MINUTES_ANALYSIS_REQUEST, partitionKey=minutes-user2, error=status-code: 401, status-description: InvalidSignature: The token has an invalid signature., errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: $cbs, REFERENCE_ID: cbs:receiver, LINK_CREDIT: 0] -com.azure.core.amqp.exception.AmqpException: status-code: 401, status-description: InvalidSignature: The token has an invalid signature., errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: $cbs, REFERENCE_ID: cbs:receiver, LINK_CREDIT: 0] - at com.azure.core.amqp.implementation.ExceptionUtil.amqpResponseCodeToException(ExceptionUtil.java:114) - at com.azure.core.amqp.implementation.ClaimsBasedSecurityChannel.lambda$authorize$0(ClaimsBasedSecurityChannel.java:74) - at reactor.core.publisher.FluxHandle$HandleSubscriber.onNext(FluxHandle.java:113) - at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.complete(MonoIgnoreThen.java:294) - at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onNext(MonoIgnoreThen.java:188) - at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:176) - at com.azure.core.amqp.implementation.RequestResponseChannel.settleMessage(RequestResponseChannel.java:411) - at com.azure.core.amqp.implementation.RequestResponseChannel.lambda$new$0(RequestResponseChannel.java:191) - at reactor.core.publisher.LambdaSubscriber.onNext(LambdaSubscriber.java:160) - at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) - at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200) - at reactor.core.publisher.SinkManyEmitterProcessor.drain(SinkManyEmitterProcessor.java:476) - at reactor.core.publisher.SinkManyEmitterProcessor.tryEmitNext(SinkManyEmitterProcessor.java:273) - at reactor.core.publisher.SinkManySerialized.tryEmitNext(SinkManySerialized.java:100) - at reactor.core.publisher.InternalManySink.emitNext(InternalManySink.java:27) - at com.azure.core.amqp.implementation.handler.ReceiveLinkHandler.onDelivery(ReceiveLinkHandler.java:173) - at org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:185) - at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:324) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:291) - at com.azure.core.amqp.implementation.ReactorExecutor.run(ReactorExecutor.java:91) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) - Suppressed: java.lang.Exception: #block terminated with an error - at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:146) - at reactor.core.publisher.Mono.block(Mono.java:1807) - at com.azure.messaging.eventhubs.EventHubProducerClient.createBatch(EventHubProducerClient.java:213) - at com.unicorn.hgzero.meeting.infra.event.publisher.EventHubPublisher.publishEvent(EventHubPublisher.java:185) - at com.unicorn.hgzero.meeting.infra.event.publisher.EventHubPublisher.publishMinutesAnalysisRequest(EventHubPublisher.java:156) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.publishAiAnalysisRequest(MinutesController.java:1260) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.enhanceWithAiAnalysis(MinutesController.java:1115) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.getMinutesDetail(MinutesController.java:170) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) - at com.unicorn.hgzero.common.aop.LoggingAspect.logController(LoggingAspect.java:56) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627) - at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController$$SpringCGLIB$$0.getMinutesDetail() - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) - at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) - at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340) - at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128) - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at com.unicorn.hgzero.meeting.infra.config.jwt.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - ... 1 common frames omitted -2025-10-29 16:41:09 [http-nio-8082-exec-1] ERROR c.u.h.m.i.c.MinutesController - AI 분석 요청 이벤트 발행 실패 - minutesId: minutes-user2 -java.lang.RuntimeException: 이벤트 발행 중 오류가 발생했습니다 - at com.unicorn.hgzero.meeting.infra.event.publisher.EventHubPublisher.publishEvent(EventHubPublisher.java:204) - at com.unicorn.hgzero.meeting.infra.event.publisher.EventHubPublisher.publishMinutesAnalysisRequest(EventHubPublisher.java:156) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.publishAiAnalysisRequest(MinutesController.java:1260) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.enhanceWithAiAnalysis(MinutesController.java:1115) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.getMinutesDetail(MinutesController.java:170) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) - at com.unicorn.hgzero.common.aop.LoggingAspect.logController(LoggingAspect.java:56) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627) - at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController$$SpringCGLIB$$0.getMinutesDetail() - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) - at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) - at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340) - at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128) - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at com.unicorn.hgzero.meeting.infra.config.jwt.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.base/java.lang.Thread.run(Thread.java:1583) -Caused by: com.azure.core.amqp.exception.AmqpException: status-code: 401, status-description: InvalidSignature: The token has an invalid signature., errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: $cbs, REFERENCE_ID: cbs:receiver, LINK_CREDIT: 0] - at com.azure.core.amqp.implementation.ExceptionUtil.amqpResponseCodeToException(ExceptionUtil.java:114) - at com.azure.core.amqp.implementation.ClaimsBasedSecurityChannel.lambda$authorize$0(ClaimsBasedSecurityChannel.java:74) - at reactor.core.publisher.FluxHandle$HandleSubscriber.onNext(FluxHandle.java:113) - at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.complete(MonoIgnoreThen.java:294) - at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onNext(MonoIgnoreThen.java:188) - at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:176) - at com.azure.core.amqp.implementation.RequestResponseChannel.settleMessage(RequestResponseChannel.java:411) - at com.azure.core.amqp.implementation.RequestResponseChannel.lambda$new$0(RequestResponseChannel.java:191) - at reactor.core.publisher.LambdaSubscriber.onNext(LambdaSubscriber.java:160) - at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) - at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200) - at reactor.core.publisher.SinkManyEmitterProcessor.drain(SinkManyEmitterProcessor.java:476) - at reactor.core.publisher.SinkManyEmitterProcessor.tryEmitNext(SinkManyEmitterProcessor.java:273) - at reactor.core.publisher.SinkManySerialized.tryEmitNext(SinkManySerialized.java:100) - at reactor.core.publisher.InternalManySink.emitNext(InternalManySink.java:27) - at com.azure.core.amqp.implementation.handler.ReceiveLinkHandler.onDelivery(ReceiveLinkHandler.java:173) - at org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:185) - at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:324) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:291) - at com.azure.core.amqp.implementation.ReactorExecutor.run(ReactorExecutor.java:91) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - ... 1 common frames omitted - Suppressed: java.lang.Exception: #block terminated with an error - at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:146) - at reactor.core.publisher.Mono.block(Mono.java:1807) - at com.azure.messaging.eventhubs.EventHubProducerClient.createBatch(EventHubProducerClient.java:213) - at com.unicorn.hgzero.meeting.infra.event.publisher.EventHubPublisher.publishEvent(EventHubPublisher.java:185) - at com.unicorn.hgzero.meeting.infra.event.publisher.EventHubPublisher.publishMinutesAnalysisRequest(EventHubPublisher.java:156) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.publishAiAnalysisRequest(MinutesController.java:1260) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.enhanceWithAiAnalysis(MinutesController.java:1115) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController.getMinutesDetail(MinutesController.java:170) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) - at com.unicorn.hgzero.common.aop.LoggingAspect.logController(LoggingAspect.java:56) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637) - at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627) - at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) - at com.unicorn.hgzero.meeting.infra.controller.MinutesController$$SpringCGLIB$$0.getMinutesDetail() - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) - at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) - at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340) - at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128) - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at com.unicorn.hgzero.meeting.infra.config.jwt.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - ... 1 common frames omitted -2025-10-29 16:41:09 [http-nio-8082-exec-1] DEBUG c.u.h.m.i.c.MinutesController - AI 분석 요청 이벤트 발행 완료 - minutesId: minutes-user2 -2025-10-29 16:41:09 [http-nio-8082-exec-1] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 저장 - minutesId: minutes-user2 -2025-10-29 16:41:09 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - 회의록 상세 조회 성공 - minutesId: minutes-user2 -2025-10-29 16:41:09 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.getMinutesDetail 완료 - 실행시간: 2790ms -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose","connectionId":"MF_1b7a37_1761723619589","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09","sessionName":"hgzero-eventhub-name"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose closing a local session.","connectionId":"MF_1b7a37_1761723619589","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09","sessionName":"hgzero-eventhub-name"} -2025-10-29 16:42:09 [reactor-executor-1] ERROR reactor.core.publisher.Operators - Operator called default onErrorDropped -reactor.core.Exceptions$ErrorCallbackNotImplemented: com.azure.core.amqp.exception.AmqpException: onSessionRemoteClose connectionId[MF_1b7a37_1761723619589], entityName[hgzero-eventhub-name] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: hgzero-eventhub-name] -Caused by: com.azure.core.amqp.exception.AmqpException: onSessionRemoteClose connectionId[MF_1b7a37_1761723619589], entityName[hgzero-eventhub-name] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: hgzero-eventhub-name] - at com.azure.core.amqp.implementation.ExceptionUtil.toException(ExceptionUtil.java:85) - at com.azure.core.amqp.implementation.handler.SessionHandler.onSessionRemoteClose(SessionHandler.java:136) - at org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:152) - at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:324) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:291) - at com.azure.core.amqp.implementation.ReactorExecutor.run(ReactorExecutor.java:91) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Error occurred. Removing and disposing session","exception":"onSessionRemoteClose connectionId[MF_1b7a37_1761723619589], entityName[hgzero-eventhub-name] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: hgzero-eventhub-name]","connectionId":"MF_1b7a37_1761723619589","sessionName":"hgzero-eventhub-name"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkRemoteClose","connectionId":"MF_1b7a37_1761723619589","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09","linkName":"cbs:sender","entityPath":"$cbs"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"Local link state is not closed.","connectionId":"MF_1b7a37_1761723619589","linkName":"cbs:sender","entityPath":"$cbs","state":"ACTIVE"} -2025-10-29 16:42:09 [reactor-executor-1] WARN c.a.c.a.i.RequestResponseChannel - {"az.sdk.message":"Error in SendLinkHandler. Disposing unconfirmed sends.","exception":"The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09, errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: $cbs, REFERENCE_ID: cbs:sender, LINK_CREDIT: 99]","connectionId":"MF_1b7a37_1761723619589","linkName":"cbs"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Transient error occurred. Retrying.","exception":"The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09, errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: $cbs, REFERENCE_ID: cbs:sender, LINK_CREDIT: 99]","connectionId":"MF_1b7a37_1761723619589","entityPath":"$cbs","tryCount":0,"interval_ms":4511} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkRemoteClose","connectionId":"MF_1b7a37_1761723619589","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09","linkName":"cbs:receiver","entityPath":"$cbs"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"Local link state is not closed.","connectionId":"MF_1b7a37_1761723619589","linkName":"cbs:receiver","entityPath":"$cbs","state":"ACTIVE"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose","connectionId":"MF_1b7a37_1761723619589","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09","sessionName":"cbs-session"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionRemoteClose closing a local session.","connectionId":"MF_1b7a37_1761723619589","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09","sessionName":"cbs-session"} -2025-10-29 16:42:09 [reactor-executor-1] ERROR reactor.core.publisher.Operators - Operator called default onErrorDropped -reactor.core.Exceptions$ErrorCallbackNotImplemented: com.azure.core.amqp.exception.AmqpException: onSessionRemoteClose connectionId[MF_1b7a37_1761723619589], entityName[cbs-session] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: cbs-session] -Caused by: com.azure.core.amqp.exception.AmqpException: onSessionRemoteClose connectionId[MF_1b7a37_1761723619589], entityName[cbs-session] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: cbs-session] - at com.azure.core.amqp.implementation.ExceptionUtil.toException(ExceptionUtil.java:85) - at com.azure.core.amqp.implementation.handler.SessionHandler.onSessionRemoteClose(SessionHandler.java:136) - at org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:152) - at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:324) - at org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:291) - at com.azure.core.amqp.implementation.ReactorExecutor.run(ReactorExecutor.java:91) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Error occurred. Removing and disposing session","exception":"onSessionRemoteClose connectionId[MF_1b7a37_1761723619589], entityName[cbs-session] condition[Error{condition=amqp:connection:forced, description='The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09', info=null}], errorContext[NAMESPACE: hgzero-eventhub-ns.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: cbs-session]","connectionId":"MF_1b7a37_1761723619589","sessionName":"cbs-session"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionRemoteClose","connectionId":"MF_1b7a37_1761723619589","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09","hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionLocalClose","connectionId":"MF_1b7a37_1761723619589","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionUnbound","connectionId":"MF_1b7a37_1761723619589","hostName":"hgzero-eventhub-ns.servicebus.windows.net","state":"CLOSED","remoteState":"CLOSED"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_1b7a37_1761723619589","isTransient":false,"isInitiatedByClient":false,"shutdownMessage":"Connection handler closed."} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is closed. Requesting upstream.","entityPath":"hgzero-eventhub-name"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Connection not requested, yet. Requesting one.","entityPath":"hgzero-eventhub-name"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_e1a2ac_1761723729901"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionFinal.","connectionId":"MF_1b7a37_1761723619589","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09","sessionName":"hgzero-eventhub-name"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.SendLinkHandler - {"az.sdk.message":"onLinkFinal","connectionId":"MF_1b7a37_1761723619589","linkName":"cbs:sender","entityPath":"$cbs"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.ReceiveLinkHandler - {"az.sdk.message":"onLinkFinal","connectionId":"MF_1b7a37_1761723619589","linkName":"cbs:receiver","entityPath":"$cbs"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.SessionHandler - {"az.sdk.message":"onSessionFinal.","connectionId":"MF_1b7a37_1761723619589","errorCondition":"amqp:connection:forced","errorDescription":"The connection was closed by container '935b336afa904514a926dae4b51a14cc_G5' because it did not have any active links in the past 60000 milliseconds. TrackingId:935b336afa904514a926dae4b51a14cc_G5, SystemTracker:gateway5, Timestamp:2025-10-29T07:42:09","sessionName":"cbs-session"} -2025-10-29 16:42:09 [reactor-executor-1] INFO c.a.c.a.i.handler.ConnectionHandler - {"az.sdk.message":"onConnectionFinal","connectionId":"MF_1b7a37_1761723619589","errorCondition":null,"errorDescription":null,"hostName":"hgzero-eventhub-ns.servicebus.windows.net"} -2025-10-29 16:42:14 [parallel-10] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Requesting from upstream.","connectionId":"MF_1b7a37_1761723619589","entityPath":"$cbs","tryCount":0} -2025-10-29 16:42:14 [parallel-10] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Connection not requested, yet. Requesting one.","connectionId":"MF_1b7a37_1761723619589","entityPath":"$cbs"} -2025-10-29 16:42:14 [parallel-10] WARN c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Retry attempts exhausted or exception was not retriable.","exception":"Cannot invoke \"java.util.List.add(Object)\" because \"this._sessions\" is null","connectionId":"MF_1b7a37_1761723619589","entityPath":"$cbs","tryCount":1} -2025-10-29 16:42:14 [parallel-10] ERROR reactor.core.publisher.Operators - Operator called default onErrorDropped -reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.NullPointerException: Cannot invoke "java.util.List.add(Object)" because "this._sessions" is null -Caused by: java.lang.NullPointerException: Cannot invoke "java.util.List.add(Object)" because "this._sessions" is null - at org.apache.qpid.proton.engine.impl.ConnectionImpl.session(ConnectionImpl.java:91) - at org.apache.qpid.proton.engine.impl.ConnectionImpl.session(ConnectionImpl.java:39) - at com.azure.core.amqp.implementation.ReactorConnection.lambda$createSession$13(ReactorConnection.java:282) - at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) - at com.azure.core.amqp.implementation.ReactorConnection.lambda$createSession$14(ReactorConnection.java:279) - at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113) - at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) - at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:137) - at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.request(MonoIgnoreThen.java:164) - at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.request(FluxHide.java:152) - at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.request(MonoPeekTerminal.java:139) - at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171) - at reactor.core.publisher.MonoFlatMap$FlatMapMain.request(MonoFlatMap.java:194) - at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171) - at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171) - at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.request(FluxPeekFuseable.java:144) - at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.request(Operators.java:2331) - at com.azure.core.amqp.implementation.AmqpChannelProcessor.requestUpstream(AmqpChannelProcessor.java:317) - at com.azure.core.amqp.implementation.AmqpChannelProcessor.lambda$onError$4(AmqpChannelProcessor.java:213) - at reactor.core.publisher.LambdaMonoSubscriber.onNext(LambdaMonoSubscriber.java:171) - at reactor.core.publisher.MonoDelay$MonoDelayRunnable.propagateDelay(MonoDelay.java:270) - at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:285) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) - at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 16:42:14 [parallel-10] INFO c.a.c.a.i.AmqpChannelProcessor - {"az.sdk.message":"Error in AMQP channel processor.","connectionId":"MF_1b7a37_1761723619589","entityPath":"$cbs","subscriberId":"un_3e7cb5_1761723729899"} -2025-10-29 16:42:46 [http-nio-8082-exec-3] DEBUG o.s.security.web.FilterChainProxy - Securing PUT /api/meetings/minutes/minutes-user2/agenda-sections -2025-10-29 16:42:46 [http-nio-8082-exec-3] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: user-002 (user-002) -2025-10-29 16:42:46 [http-nio-8082-exec-3] DEBUG o.s.security.web.FilterChainProxy - Secured PUT /api/meetings/minutes/minutes-user2/agenda-sections -2025-10-29 16:42:46 [http-nio-8082-exec-3] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.updateAgendaSections 호출 - 파라미터: [user-002, user-002, minutes-user2, com.unicorn.hgzero.meeting.infra.dto.request.UpdateAgendaSectionsRequest@7d37ec1b] -2025-10-29 16:42:46 [http-nio-8082-exec-3] INFO c.u.h.m.i.c.MinutesController - [API] 회의록 안건별 수정 요청 - userId: user-002, minutesId: minutes-user2, agendaCount: 1 -2025-10-29 16:42:46 [http-nio-8082-exec-3] INFO c.u.h.m.i.c.MinutesController - 회의록 수정 권한 검증 스킵 - 모든 사용자 수정 가능 -2025-10-29 16:42:46 [http-nio-8082-exec-3] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 일괄 수정 - 개수: 1 -2025-10-29 16:42:46 [http-nio-8082-exec-3] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 요약 수정 - agendaId: 1, summary length: 58 -2025-10-29 16:42:46 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.pending_items, - ase1_0.summary, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.id=? -2025-10-29 16:42:46 [http-nio-8082-exec-3] DEBUG org.hibernate.SQL - - /* dynamic native SQL query */ UPDATE - agenda_sections - SET - summary = ?, - updated_at = CURRENT_TIMESTAMP - WHERE - id = ? -2025-10-29 16:42:46 [http-nio-8082-exec-3] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 요약 수정 완료 - agendaId: 1 -2025-10-29 16:42:46 [http-nio-8082-exec-3] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 일괄 수정 완료 - 개수: 1 -2025-10-29 16:42:46 [http-nio-8082-exec-3] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 삭제 - minutesId: minutes-user2 -2025-10-29 16:42:46 [http-nio-8082-exec-3] INFO c.u.h.m.i.c.MinutesController - 회의록 안건별 수정 성공 - minutesId: minutes-user2, updatedCount: 1 -2025-10-29 16:42:46 [http-nio-8082-exec-3] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.updateAgendaSections 완료 - 실행시간: 174ms -2025-10-29 16:47:24 [lettuce-nioEventLoop-6-1] INFO i.l.core.protocol.CommandHandler - null Unexpected exception during request: java.net.SocketException: Connection reset -java.net.SocketException: Connection reset - at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:401) - at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:434) - at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) - at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) - at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:356) - at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) - at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) - at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) - at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-10-29 16:47:24 [lettuce-eventExecutorLoop-1-2] INFO i.l.core.protocol.ConnectionWatchdog - Reconnecting, last destination was /20.249.177.114:6379 -2025-10-29 16:47:24 [lettuce-nioEventLoop-6-2] INFO i.l.c.protocol.ReconnectionHandler - Reconnected to 20.249.177.114/:6379 -2025-10-29 16:48:15 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Upstream connection publisher was completed. Terminating processor.","entityPath":"hgzero-eventhub-name"} -2025-10-29 16:48:15 [SpringApplicationShutdownHook] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_e1a2ac_1761723729901","isTransient":false,"isInitiatedByClient":true,"shutdownMessage":"Disposed by client."} -2025-10-29 16:48:15 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is disposed.","entityPath":"hgzero-eventhub-name"} -2025-10-29 16:48:15 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 16:48:15 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@555454c7] for TypeConfiguration -2025-10-29 16:48:15 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@6a590069] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@555454c7] -2025-10-29 16:48:15 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-10-29 16:48:15 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-10-29 16:48:17 [main] INFO c.u.h.meeting.MeetingApplication - Starting MeetingApplication using Java 21.0.8 with PID 97401 (/Users/adela/home/workspace/recent/HGZero/meeting/build/classes/java/main started by adela in /Users/adela/home/workspace/recent/HGZero/meeting) -2025-10-29 16:48:17 [main] DEBUG c.u.h.meeting.MeetingApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 -2025-10-29 16:48:17 [main] INFO c.u.h.meeting.MeetingApplication - The following 1 profile is active: "dev" -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 75 ms. Found 10 JPA repository interfaces. -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.AgendaSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.AgendaSectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingAnalysisJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingParticipantJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.SessionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TemplateJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TodoJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository -2025-10-29 16:48:18 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 28 ms. Found 0 Redis repository interfaces. -2025-10-29 16:48:18 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8082 (http) -2025-10-29 16:48:18 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-10-29 16:48:18 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] -2025-10-29 16:48:19 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-10-29 16:48:19 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1233 ms -2025-10-29 16:48:19 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-10-29 16:48:19 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final -2025-10-29 16:48:19 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@104cfb24 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@104cfb24 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@104cfb24 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@5340ccb9 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@5340ccb9 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@2bc8caa7 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@2bc8caa7 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@582ea164 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@582ea164 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@2fccf49e -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@2fccf49e -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@2fccf49e -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@7abcc0da -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@7abcc0da -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@7abcc0da -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@174cb0d8 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@174cb0d8 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@3ac406d4 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@72646d16 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@72646d16 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@6ec2d990 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@1cfa7ee0 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@612290d -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@612290d -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@612290d -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@57cff804 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@57cff804 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@57cff804 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@2f39b534 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@2f39b534 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@2f39b534 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@60fbc34d -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@60fbc34d -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@60fbc34d -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@7736c41e -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@7736c41e -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@7736c41e -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@5f911d24 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@5f911d24 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@3de383f7 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@3de383f7 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@33ccead -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@33ccead -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@33ccead -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@42ebece0 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@15c4b1a4 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@15c4b1a4 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@341964d0 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@51b59d58 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@51b59d58 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@51b59d58 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@4ca4f762 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@7c5d36c3 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@31de27c -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@7ebfe01a -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@7ebfe01a -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@154b0748 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@154b0748 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@35c00c -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@6cd7dc74 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@6d695ec4 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@20556566 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@e4ef4c0 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@5ca8bd01 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@7b10472e -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@7b10472e -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@70e5737f -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@70e5737f -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@9746157 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@9746157 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@10ad95cd -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@10ad95cd -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@69fd99c1 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@69fd99c1 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@32d8710a -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@180cc0df -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@64f33dee -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@64f33dee -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@61c58320 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@10e4ee33 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@6e90cec8 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@13f182b9 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@13f182b9 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@5ee0cf64 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@69c227fd -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@14c5283 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@14c5283 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@1eb7ec59 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@1eb7ec59 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@46748b04 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@46748b04 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@46748b04 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@3e71a1f8 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@3e71a1f8 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@3e71a1f8 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@5d4a34ff -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@7cbede2b -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@1ef04613 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@1ef04613 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@2d3d4a54 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@2d3d4a54 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@2d3d4a54 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@215c6ec0 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@2b19b346 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@37c5b8e8 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@37c5b8e8 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@706d2bae -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@706d2bae -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@706d2bae -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@3205610d -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@3205610d -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@54e06788 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@54e06788 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@4e789704 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@4e789704 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@5751e53e -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@5751e53e -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@4e45fbd0 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@4e45fbd0 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@19ce19b7 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@13047d3d -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@43719e98 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@43719e98 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@6aa9a93b -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@81dfdee -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@3b046e64 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@1c43e84e -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@7bd694a5 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@21ce2e4d -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@3921135e -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@3a239dac -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@759f45f1 -2025-10-29 16:48:19 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer -2025-10-29 16:48:19 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [hibernate.temp.use_jdbc_metadata_defaults], use [hibernate.boot.allow_jdbc_metadata_access] instead -2025-10-29 16:48:19 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2025-10-29 16:48:19 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@58932d08) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@45648e75) -2025-10-29 16:48:19 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@e344f14) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@2d117280) -2025-10-29 16:48:19 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) -2025-10-29 16:48:19 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@2f3a0f37 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@2f3a0f37 -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@43719e98` -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 16:48:19 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) -2025-10-29 16:48:19 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@2a2b3aff] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@4bc9451b] -2025-10-29 16:48:20 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 16:48:20 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 16:48:20 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2025-10-29 16:48:20 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@2a2b3aff] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@555454c7] -2025-10-29 16:48:20 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.database.action], use [jakarta.persistence.schema-generation.database.action] instead -2025-10-29 16:48:20 [main] WARN org.hibernate.orm.deprecation - HHH90000021: Encountered deprecated setting [javax.persistence.schema-generation.scripts.action], use [jakarta.persistence.schema-generation.scripts.action] instead -2025-10-29 16:48:20 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@555454c7] for TypeConfiguration -2025-10-29 16:48:20 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-10-29 16:48:20 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. -2025-10-29 16:48:21 [main] INFO c.u.h.m.infra.cache.CacheConfig - ObjectMapper 설정 완료 -2025-10-29 16:48:21 [main] INFO c.u.h.m.infra.config.RedisConfig - Redis Lettuce Client 설정 완료 - Standalone 모드 (Master-Replica 자동 탐색 비활성화) -2025-10-29 16:48:21 [main] INFO c.u.h.m.infra.config.RedisConfig - LettuceConnectionFactory 설정 완료 - Host: 20.249.177.114:6379, Database: 1 -2025-10-29 16:48:21 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library -2025-10-29 16:48:21 [main] INFO c.u.h.m.infra.config.RedisConfig - RedisTemplate 설정 완료 -2025-10-29 16:48:21 [main] INFO c.u.h.m.infra.config.EventHubConfig - Initializing Azure EventHub configuration with hub name: hgzero-eventhub-name -2025-10-29 16:48:21 [main] INFO c.u.h.m.infra.config.EventHubConfig - Creating EventHub producer for hub: hgzero-eventhub-name -2025-10-29 16:48:21 [main] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_811610_1761724101616"} -2025-10-29 16:48:21 [main] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"} -2025-10-29 16:48:21 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-10-29 16:48:21 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - - -Using generated security password: cfbbef4f-9e6b-4196-a01a-bcb255e4d522 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2025-10-29 16:48:21 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2025-10-29 16:48:21 [main] INFO c.u.h.m.infra.config.WebSocketConfig - WebSocket 핸들러 등록 완료 - endpoint: /ws/minutes/{minutesId} -2025-10-29 16:48:22 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' -2025-10-29 16:48:22 [main] DEBUG o.s.s.web.DefaultSecurityFilterChain - Will secure any request with filters: DisableEncodeUrlFilter, WebAsyncManagerIntegrationFilter, SecurityContextHolderFilter, HeaderWriterFilter, CorsFilter, LogoutFilter, JwtAuthenticationFilter, RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter, AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, AuthorizationFilter -2025-10-29 16:48:22 [main] WARN o.s.b.a.t.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration - Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false) -2025-10-29 16:48:22 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8082 (http) with context path '/' -2025-10-29 16:48:22 [main] INFO c.u.h.meeting.MeetingApplication - Started MeetingApplication in 5.205 seconds (process running for 5.395) -2025-10-29 16:48:26 [http-nio-8082-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-10-29 16:48:26 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-10-29 16:48:26 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms -2025-10-29 16:48:26 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Securing PUT /api/meetings/minutes/minutes-user2/agenda-sections -2025-10-29 16:48:26 [http-nio-8082-exec-1] DEBUG c.u.h.m.i.c.j.JwtAuthenticationFilter - 헤더 기반 인증된 사용자: user-002 (user-002) -2025-10-29 16:48:26 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Secured PUT /api/meetings/minutes/minutes-user2/agenda-sections -2025-10-29 16:48:26 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.updateAgendaSections 호출 - 파라미터: [user-002, user-002, minutes-user2, com.unicorn.hgzero.meeting.infra.dto.request.UpdateAgendaSectionsRequest@7389b6f3] -2025-10-29 16:48:26 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - [API] 회의록 안건별 수정 요청 - userId: user-002, minutesId: minutes-user2, agendaCount: 1 -2025-10-29 16:48:26 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - 회의록 수정 권한 검증 스킵 - 모든 사용자 수정 가능 -2025-10-29 16:48:26 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-10-29 16:48:27 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@6c5007f7 -2025-10-29 16:48:27 [http-nio-8082-exec-1] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-10-29 16:48:28 [http-nio-8082-exec-1] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 일괄 수정 - 개수: 1 -2025-10-29 16:48:28 [http-nio-8082-exec-1] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 요약 수정 - agendaId: 1, summary length: 58 -2025-10-29 16:48:28 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - select - ase1_0.id, - ase1_0.agenda_number, - ase1_0.agenda_title, - ase1_0.ai_summary_short, - ase1_0.created_at, - ase1_0.meeting_id, - ase1_0.minutes_id, - ase1_0.pending_items, - ase1_0.summary, - ase1_0.todos, - ase1_0.updated_at - from - agenda_sections ase1_0 - where - ase1_0.id=? -2025-10-29 16:48:28 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL - - /* dynamic native SQL query */ UPDATE - agenda_sections - SET - summary = ?, - updated_at = CURRENT_TIMESTAMP - WHERE - id = ? -2025-10-29 16:48:28 [http-nio-8082-exec-1] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 요약 수정 완료 - agendaId: 1 -2025-10-29 16:48:28 [http-nio-8082-exec-1] INFO c.u.h.m.b.s.AgendaSectionService - 안건 섹션 일괄 수정 완료 - 개수: 1 -2025-10-29 16:48:29 [http-nio-8082-exec-1] DEBUG c.u.h.m.infra.cache.CacheService - 회의록 상세 캐시 삭제 - minutesId: minutes-user2 -2025-10-29 16:48:29 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MinutesController - 회의록 안건별 수정 성공 - minutesId: minutes-user2, updatedCount: 1 -2025-10-29 16:48:29 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MinutesController.updateAgendaSections 완료 - 실행시간: 2751ms +2025-10-30 00:53:19 [HikariPool-1 housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=55m31s187ms). +2025-10-30 02:01:20 [HikariPool-1 housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=1h8m348ms). +2025-10-30 03:12:18 [HikariPool-1 housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=1h10m58s413ms). +2025-10-30 03:45:18 [HikariPool-1 housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=33m532ms). +2025-10-30 05:23:33 [HikariPool-1 housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=1h38m14s401ms). +2025-10-30 05:55:21 [HikariPool-1 housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=31m47s698ms). +2025-10-30 06:36:34 [HikariPool-1 housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=41m13s560ms). +2025-10-30 07:17:08 [HikariPool-1 housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=40m34s96ms). +2025-10-30 07:35:36 [HikariPool-1 housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=18m27s909ms). +2025-10-30 08:28:37 [HikariPool-1 housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=53m728ms). +2025-10-30 08:41:30 [HikariPool-1 housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=12m52s962ms). diff --git a/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/AgendaSectionService.java b/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/AgendaSectionService.java index 370fa78..2810004 100644 --- a/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/AgendaSectionService.java +++ b/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/AgendaSectionService.java @@ -120,6 +120,35 @@ public class AgendaSectionService { return updatedEntity.toDomain(); } + /** + * 안건 섹션 요약 및 AI 요약 수정 + * @param agendaId 안건 ID + * @param summary 새로운 요약 내용 + * @param aiSummary AI 요약 + * @return 수정된 안건 섹션 + */ + @Transactional + public AgendaSection updateAgendaSummaryWithAi(String agendaId, String summary, String aiSummary) { + log.info("안건 섹션 요약 및 AI 요약 수정 - agendaId: {}, summary length: {}, aiSummary length: {}", + agendaId, summary != null ? summary.length() : 0, aiSummary != null ? aiSummary.length() : 0); + + // 먼저 존재 여부 확인 + AgendaSectionEntity entity = agendaSectionRepository.findById(agendaId) + .orElseThrow(() -> new BusinessException(ErrorCode.AGENDA_SECTION_NOT_FOUND, + "안건 섹션을 찾을 수 없습니다: " + agendaId)); + + // Native Query로 summary와 ai_summary_short 업데이트 + agendaSectionRepository.updateSummaryAndAiSummaryById(agendaId, summary, aiSummary); + + // 업데이트된 엔티티 다시 조회 + AgendaSectionEntity updatedEntity = agendaSectionRepository.findById(agendaId) + .orElseThrow(() -> new BusinessException(ErrorCode.AGENDA_SECTION_NOT_FOUND, + "업데이트된 안건 섹션을 찾을 수 없습니다: " + agendaId)); + + log.info("안건 섹션 요약 및 AI 요약 수정 완료 - agendaId: {}", agendaId); + return updatedEntity.toDomain(); + } + /** * 여러 안건 섹션의 요약을 한 번에 수정 * @param updateItems 안건 ID와 새로운 요약 내용의 목록 @@ -131,7 +160,15 @@ public class AgendaSectionService { log.info("안건 섹션 일괄 수정 - 개수: {}", updateItems.size()); List updatedSections = updateItems.stream() - .map(item -> updateAgendaSummary(item.getAgendaId(), item.getContent())) + .map(item -> { + if (item.getAiSummary() != null) { + // AI 요약이 포함된 경우 + return updateAgendaSummaryWithAi(item.getAgendaId(), item.getContent(), item.getAiSummary()); + } else { + // AI 요약이 없는 경우 기존 메소드 사용 + return updateAgendaSummary(item.getAgendaId(), item.getContent()); + } + }) .collect(Collectors.toList()); log.info("안건 섹션 일괄 수정 완료 - 개수: {}", updatedSections.size()); diff --git a/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/EndMeetingService.java b/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/EndMeetingService.java index f6d2ec8..47b968e 100644 --- a/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/EndMeetingService.java +++ b/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/EndMeetingService.java @@ -13,11 +13,14 @@ import com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingEntity; import com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesEntity; import com.unicorn.hgzero.meeting.infra.gateway.entity.MinutesSectionEntity; import com.unicorn.hgzero.meeting.infra.gateway.entity.TodoEntity; +import com.unicorn.hgzero.meeting.infra.gateway.entity.AgendaSectionEntity; +import com.unicorn.hgzero.meeting.infra.gateway.repository.AgendaSectionJpaRepository; import com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingAnalysisJpaRepository; import com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingJpaRepository; import com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesJpaRepository; import com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesSectionJpaRepository; import com.unicorn.hgzero.meeting.infra.gateway.repository.TodoJpaRepository; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Primary; @@ -45,7 +48,9 @@ public class EndMeetingService implements EndMeetingUseCase { private final MinutesSectionJpaRepository minutesSectionRepository; private final TodoJpaRepository todoRepository; private final MeetingAnalysisJpaRepository analysisRepository; + private final AgendaSectionJpaRepository agendaSectionRepository; private final AIServiceClient aiServiceClient; + private final ObjectMapper objectMapper; /** * 회의 종료 및 AI 분석 실행 @@ -58,44 +63,73 @@ public class EndMeetingService implements EndMeetingUseCase { public MeetingEndDTO endMeeting(String meetingId) { log.info("회의 종료 시작 - meetingId: {}", meetingId); - // 1. 회의 정보 조회 - MeetingEntity meeting = meetingRepository.findById(meetingId) - .orElseThrow(() -> new IllegalArgumentException("회의를 찾을 수 없습니다: " + meetingId)); + try { + // 1. 회의 정보 조회 + MeetingEntity meeting = meetingRepository.findById(meetingId) + .orElseThrow(() -> { + log.error("회의를 찾을 수 없음 - meetingId: {}", meetingId); + return new IllegalArgumentException("회의를 찾을 수 없습니다: " + meetingId); + }); - // 2. 참석자별 회의록 조회 (userId가 있는 회의록들) - List participantMinutesList = minutesRepository.findByMeetingIdAndUserIdIsNotNull(meetingId); + log.info("회의 정보 조회 완료 - title: {}, status: {}", meeting.getTitle(), meeting.getStatus()); - if (participantMinutesList.isEmpty()) { - throw new IllegalStateException("참석자 회의록이 없습니다: " + meetingId); + // 2. 참석자별 회의록 조회 (userId가 있는 회의록들) + List participantMinutesList = minutesRepository.findByMeetingIdAndUserIdIsNotNull(meetingId); + + if (participantMinutesList.isEmpty()) { + log.error("참석자 회의록이 없음 - meetingId: {}", meetingId); + throw new IllegalStateException("참석자 회의록이 없습니다: " + meetingId); + } + + log.info("참석자 회의록 조회 완료 - 참석자 수: {}", participantMinutesList.size()); + + // 3. 각 회의록의 sections 조회 및 통합 + List allMinutesSections = new ArrayList<>(); + for (MinutesEntity minutes : participantMinutesList) { + List sections = minutesSectionRepository.findByMinutesIdOrderByOrderAsc( + minutes.getMinutesId() + ); + allMinutesSections.addAll(sections); + log.debug("회의록 섹션 조회 - minutesId: {}, userId: {}, 섹션 수: {}", + minutes.getMinutesId(), minutes.getUserId(), sections.size()); + } + + log.info("전체 회의록 섹션 조회 완료 - 총 섹션 수: {}", allMinutesSections.size()); + + // 4. AI 통합 분석 요청 데이터 생성 + ConsolidateRequest request = createConsolidateRequest(meeting, allMinutesSections, participantMinutesList); + log.info("AI 통합 분석 요청 데이터 생성 완료 - participantMinutes 수: {}", + request.getParticipantMinutes().size()); + + // 5. AI Service 호출 + log.info("AI Service 호출 시작..."); + ConsolidateResponse aiResponse = aiServiceClient.consolidateMinutes(request); + log.info("AI Service 호출 완료 - 안건 수: {}", aiResponse.getAgendaSummaries().size()); + + // 6. AI 분석 결과 저장 + MeetingAnalysis analysis = saveAnalysisResult(meeting, aiResponse); + + // 7. Todo 생성 및 저장 + List todos = createAndSaveTodos(meeting, aiResponse, analysis); + + // 8. 회의 종료 처리 + meeting.end(); + meetingRepository.save(meeting); + log.info("회의 상태 업데이트 완료 - status: {}", meeting.getStatus()); + + // 9. 응답 DTO 생성 + MeetingEndDTO result = createMeetingEndDTO(meeting, analysis, todos, participantMinutesList.size()); + + log.info("회의 종료 처리 완료 - meetingId: {}, 안건 수: {}, Todo 수: {}", + meetingId, analysis.getAgendaAnalyses().size(), todos.size()); + + return result; + + } catch (Exception e) { + log.error("회의 종료 처리 중 오류 발생 - meetingId: {}, 에러: {}", + meetingId, e.getMessage(), e); + throw e; } - - // 3. 각 회의록의 sections 조회 및 통합 - List allMinutesSections = new ArrayList<>(); - for (MinutesEntity minutes : participantMinutesList) { - List sections = minutesSectionRepository.findByMinutesIdOrderByOrderAsc( - minutes.getMinutesId() - ); - allMinutesSections.addAll(sections); - } - - // 4. AI 통합 분석 요청 데이터 생성 - ConsolidateRequest request = createConsolidateRequest(meeting, allMinutesSections, participantMinutesList); - - // 5. AI Service 호출 - ConsolidateResponse aiResponse = aiServiceClient.consolidateMinutes(request); - - // 5. AI 분석 결과 저장 - MeetingAnalysis analysis = saveAnalysisResult(meeting, aiResponse); - - // 6. Todo 생성 및 저장 - List todos = createAndSaveTodos(meeting, aiResponse, analysis); - - // 6. 회의 종료 처리 - meeting.end(); - meetingRepository.save(meeting); - - // 7. 응답 DTO 생성 - return createMeetingEndDTO(meeting, analysis, todos, participantMinutesList.size()); } /** @@ -141,7 +175,7 @@ public class EndMeetingService implements EndMeetingUseCase { .title(summary.getAgendaTitle()) .aiSummaryShort(summary.getSummaryShort()) .discussion(summary.getSummary() != null ? summary.getSummary() : "") - .decisions(List.of()) + .decisions(summary.getDecisions() != null ? summary.getDecisions() : List.of()) .pending(summary.getPending() != null ? summary.getPending() : List.of()) .extractedTodos(summary.getTodos() != null ? summary.getTodos().stream() @@ -168,18 +202,61 @@ public class EndMeetingService implements EndMeetingUseCase { MeetingAnalysisEntity entity = MeetingAnalysisEntity.fromDomain(analysis); analysisRepository.save(entity); + // AgendaSection 저장 (안건별 회의록) + saveAgendaSections(meeting.getMeetingId(), aiResponse); + log.info("AI 분석 결과 저장 완료 - analysisId: {}", analysis.getAnalysisId()); return analysis; } + /** + * AgendaSection 저장 + */ + private void saveAgendaSections(String meetingId, ConsolidateResponse aiResponse) { + int agendaNumber = 1; + + for (var summary : aiResponse.getAgendaSummaries()) { + try { + // pending items와 todos를 JSON 문자열로 변환 + String pendingItemsJson = summary.getPending() != null && !summary.getPending().isEmpty() + ? objectMapper.writeValueAsString(summary.getPending()) + : null; + + String todosJson = summary.getTodos() != null && !summary.getTodos().isEmpty() + ? objectMapper.writeValueAsString(summary.getTodos()) + : null; + + AgendaSectionEntity agendaSection = AgendaSectionEntity.builder() + .id(UUID.randomUUID().toString()) + .minutesId(meetingId) // AI 통합 회의록 ID로 사용 + .meetingId(meetingId) + .agendaNumber(agendaNumber++) + .agendaTitle(summary.getAgendaTitle()) + .aiSummaryShort(summary.getSummaryShort()) + .summary(summary.getSummary()) + .pendingItems(pendingItemsJson) + .todos(todosJson) + .build(); + + agendaSectionRepository.save(agendaSection); + log.debug("AgendaSection 저장 완료 - agendaTitle: {}", summary.getAgendaTitle()); + + } catch (Exception e) { + log.error("AgendaSection 저장 실패 - agendaTitle: {}", summary.getAgendaTitle(), e); + } + } + + log.info("AgendaSection 저장 완료 - meetingId: {}, count: {}", meetingId, aiResponse.getAgendaSummaries().size()); + } + /** * Todo 생성 및 저장 */ private List createAndSaveTodos(MeetingEntity meeting, ConsolidateResponse aiResponse, MeetingAnalysis analysis) { List todos = aiResponse.getAgendaSummaries().stream() .flatMap(agenda -> { - String agendaId = findAgendaIdByTitle(analysis, agenda.getAgendaTitle()); + // agendaId는 향후 Todo와 안건 매핑에 사용될 수 있음 (현재는 사용하지 않음) List todoList = agenda.getTodos() != null ? agenda.getTodos() : List.of(); return todoList.stream() .map(todo -> TodoEntity.builder() @@ -187,7 +264,7 @@ public class EndMeetingService implements EndMeetingUseCase { .meetingId(meeting.getMeetingId()) .minutesId(meeting.getMeetingId()) // 실제로는 minutesId 필요 .title(todo.getTitle()) - .assigneeId("") // AI가 담당자를 추출하지 않으므로 빈 값 + .assigneeId(todo.getAssignee() != null ? todo.getAssignee() : "") // AI가 추출한 담당자 .status("PENDING") .build()); }) diff --git a/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/MeetingMemoService.java b/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/MeetingMemoService.java index 30ff821..1a43ec1 100644 --- a/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/MeetingMemoService.java +++ b/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/MeetingMemoService.java @@ -66,8 +66,8 @@ public class MeetingMemoService implements SaveMeetingMemoUseCase { // 4. 기존 메모 섹션 조회 또는 새로운 섹션 생성 MinutesSection memoSection = minutesSectionReader.findFirstByMinutesIdAndType( - minutes.getMinutesId(), - "AI_MEMO" + minutes.getMinutesId(), + "MEMO" ).orElseGet(() -> createNewMemoSection(minutes.getMinutesId())); // 5. 메모 내용 업데이트 (기존 내용에 추가) @@ -81,7 +81,7 @@ public class MeetingMemoService implements SaveMeetingMemoUseCase { MinutesSection updatedSection = MinutesSection.builder() .sectionId(memoSection.getSectionId()) .minutesId(memoSection.getMinutesId()) - .type("AI_MEMO") + .type("MEMO") .title("회의 메모") .content(updatedContent) .order(memoSection.getOrder()) @@ -105,7 +105,7 @@ public class MeetingMemoService implements SaveMeetingMemoUseCase { return MinutesSection.builder() .sectionId(generateSectionId()) .minutesId(minutesId) - .type("AI_MEMO") + .type("MEMO") .title("회의 메모") .content("") .order(maxOrder + 1) diff --git a/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/MeetingService.java b/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/MeetingService.java index 82b7ee5..fe7485a 100644 --- a/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/MeetingService.java +++ b/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/MeetingService.java @@ -226,6 +226,7 @@ public class MeetingService implements .sections(List.of()) .status("DRAFT") .version(1) + .userId(meeting.getOrganizerId()) .createdBy(meeting.getOrganizerId()) // TODO: 실제 사용자 ID 사용 .createdAt(LocalDateTime.now()) .build(); diff --git a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/client/AIServiceClient.java b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/client/AIServiceClient.java index 5e03d64..80eed06 100644 --- a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/client/AIServiceClient.java +++ b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/client/AIServiceClient.java @@ -43,11 +43,10 @@ public class AIServiceClient { * @return 통합 요약 응답 */ public ConsolidateResponse consolidateMinutes(ConsolidateRequest request) { - log.info("AI Service 호출 - 회의록 통합 요약: {}", request.getMeetingId()); + String url = aiServiceUrl + "/api/transcripts/consolidate"; + log.info("AI Service 호출 시작 - URL: {}, meetingId: {}", url, request.getMeetingId()); try { - String url = aiServiceUrl + "/api/transcripts/consolidate"; - // HTTP 헤더 설정 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); @@ -55,6 +54,9 @@ public class AIServiceClient { // HTTP 요청 생성 HttpEntity httpEntity = new HttpEntity<>(request, headers); + log.debug("AI Service 요청 데이터 - participantMinutes 수: {}", + request.getParticipantMinutes() != null ? request.getParticipantMinutes().size() : 0); + // API 호출 ResponseEntity response = restTemplate.postForEntity( url, @@ -65,15 +67,30 @@ public class AIServiceClient { ConsolidateResponse result = response.getBody(); if (result == null) { + log.error("AI Service 응답이 비어있습니다 - HTTP Status: {}", response.getStatusCode()); throw new RuntimeException("AI Service 응답이 비어있습니다"); } - log.info("AI Service 응답 수신 완료 - 안건 수: {}", result.getAgendaSummaries().size()); + log.info("AI Service 응답 수신 완료 - 안건 수: {}, HTTP Status: {}", + result.getAgendaSummaries() != null ? result.getAgendaSummaries().size() : 0, + response.getStatusCode()); return result; + } catch (org.springframework.web.client.ResourceAccessException e) { + log.error("AI Service 연결 실패 - URL: {}, 에러: {}", url, e.getMessage()); + throw new RuntimeException("AI 서비스에 연결할 수 없습니다. 서비스가 실행 중인지 확인해주세요.", e); + } catch (org.springframework.web.client.HttpClientErrorException e) { + log.error("AI Service 클라이언트 오류 - HTTP Status: {}, 응답: {}", + e.getStatusCode(), e.getResponseBodyAsString()); + throw new RuntimeException("AI 서비스 요청이 거부되었습니다: " + e.getMessage(), e); + } catch (org.springframework.web.client.HttpServerErrorException e) { + log.error("AI Service 서버 오류 - HTTP Status: {}, 응답: {}", + e.getStatusCode(), e.getResponseBodyAsString()); + throw new RuntimeException("AI 서비스에서 오류가 발생했습니다: " + e.getMessage(), e); } catch (Exception e) { - log.error("AI Service 호출 실패: {}", e.getMessage(), e); + log.error("AI Service 호출 중 예상치 못한 오류 - 타입: {}, 메시지: {}", + e.getClass().getSimpleName(), e.getMessage(), e); throw new RuntimeException("AI 회의록 통합 처리 중 오류가 발생했습니다: " + e.getMessage(), e); } } diff --git a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/config/EventHubConfig.java b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/config/EventHubConfig.java index cafbbf4..41d452d 100644 --- a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/config/EventHubConfig.java +++ b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/config/EventHubConfig.java @@ -15,7 +15,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration @Slf4j -@org.springframework.boot.autoconfigure.condition.ConditionalOnExpression("'${eventhub.connection-string:}'.length() > 0") +@ConditionalOnProperty(name = "eventhub.connection-string") public class EventHubConfig { @Value("${eventhub.connection-string}") diff --git a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/ai/AgendaSummaryDTO.java b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/ai/AgendaSummaryDTO.java index 609ce19..32df29a 100644 --- a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/ai/AgendaSummaryDTO.java +++ b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/ai/AgendaSummaryDTO.java @@ -37,10 +37,15 @@ public class AgendaSummaryDTO { /** * 안건별 회의록 요약 - * 사용자가 입력한 회의록 내용을 요약한 결과 + * 사용자가 입력한 회의록 내용을 요약한 결과 (논의사항 + 결정사항) */ private String summary; + /** + * 안건별 결정사항 배열 (대시보드 표시용) + */ + private List decisions; + /** * 보류 사항 */ diff --git a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/ai/ExtractedTodoDTO.java b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/ai/ExtractedTodoDTO.java index a293ff7..832b652 100644 --- a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/ai/ExtractedTodoDTO.java +++ b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/ai/ExtractedTodoDTO.java @@ -6,7 +6,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; /** - * AI 추출 Todo DTO (제목만) + * AI 추출 Todo DTO */ @Getter @Builder @@ -18,4 +18,9 @@ public class ExtractedTodoDTO { * Todo 제목 */ private String title; + + /** + * 담당자 이름 (있는 경우에만) + */ + private String assignee; } diff --git a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/request/UpdateAgendaSectionsRequest.java b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/request/UpdateAgendaSectionsRequest.java index eb11a71..f73082a 100644 --- a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/request/UpdateAgendaSectionsRequest.java +++ b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/request/UpdateAgendaSectionsRequest.java @@ -40,5 +40,10 @@ public class UpdateAgendaSectionsRequest { */ @NotBlank(message = "안건 내용은 필수입니다") private String content; + + /** + * AI 요약 (agenda_sections.ai_summary_short) + */ + private String aiSummary; } } \ No newline at end of file diff --git a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/gateway/entity/MinutesSectionEntity.java b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/gateway/entity/MinutesSectionEntity.java index 740f186..7d5a76c 100644 --- a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/gateway/entity/MinutesSectionEntity.java +++ b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/gateway/entity/MinutesSectionEntity.java @@ -37,7 +37,7 @@ public class MinutesSectionEntity extends BaseTimeEntity { @Column(name = "content", columnDefinition = "TEXT") private String content; - @Column(name = "order") + @Column(name = "\"order\"") private Integer order; @Column(name = "verified") diff --git a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/gateway/repository/AgendaSectionRepository.java b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/gateway/repository/AgendaSectionRepository.java index aa20373..b33ce21 100644 --- a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/gateway/repository/AgendaSectionRepository.java +++ b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/gateway/repository/AgendaSectionRepository.java @@ -38,4 +38,17 @@ public interface AgendaSectionRepository extends JpaRepository Event Hub Consumer -(MINUTES_FINALIZED) | - | 2. 메시지 Consume - | - v - Embedding 생성 - (OpenAI text-embedding-ada-002) - | - v - PostgreSQL + pgvector - (rag_minutes 테이블) - | - | 3. 연관 회의록 조회 - | - v - Vector Similarity Search - (Cosine Distance) -``` - -## 주요 기능 - -### 1. 회의록 RAG 저장 - -- **트리거**: Meeting 서비스에서 회의록 확정 시 Event Hub로 이벤트 발행 -- **처리 흐름**: - 1. Event Hub Consumer가 `MINUTES_FINALIZED` 이벤트 수신 - 2. 회의록 전체 내용을 텍스트로 생성 (제목 + 목적 + 섹션 내용) - 3. OpenAI Embedding API를 사용하여 1536차원 벡터 생성 - 4. `rag_minutes` 테이블에 회의록 정보와 embedding 벡터 저장 - -### 2. 연관 회의록 조회 - -- **API**: `POST /api/minutes/search` -- **검색 방식**: Vector Similarity Search (Cosine Distance) -- **입력**: 최종 회의록 내용 (full_content) -- **출력**: 유사도 높은 회의록 목록 (상위 K개, 기본값 5개) - -### 3. 회의록 상세 조회 - -- **API**: `GET /api/minutes/{minutes_id}` -- **출력**: 회의록 전체 정보 (Meeting 정보, Minutes 정보, Sections) - -## 데이터베이스 스키마 - -### rag_minutes 테이블 - -```sql -CREATE TABLE rag_minutes ( - -- Meeting 정보 - meeting_id VARCHAR(50) NOT NULL, - title VARCHAR(200) NOT NULL, - purpose VARCHAR(500), - description TEXT, - scheduled_at TIMESTAMP, - location VARCHAR(200), - organizer_id VARCHAR(50) NOT NULL, - - -- Minutes 정보 - minutes_id VARCHAR(50) PRIMARY KEY, - minutes_status VARCHAR(20) NOT NULL DEFAULT 'FINALIZED', - minutes_version INTEGER NOT NULL DEFAULT 1, - created_by VARCHAR(50) NOT NULL, - finalized_by VARCHAR(50), - finalized_at TIMESTAMP, - - -- 회의록 섹션 (JSON) - sections JSONB, - - -- 전체 회의록 내용 (검색용) - full_content TEXT NOT NULL, - - -- Embedding 벡터 - embedding vector(1536), - - -- 메타데이터 - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -); -``` - -### 인덱스 - -- `idx_rag_minutes_meeting_id`: Meeting ID로 검색 -- `idx_rag_minutes_title`: 제목으로 검색 -- `idx_rag_minutes_finalized_at`: 확정 일시로 정렬 -- `idx_rag_minutes_created_by`: 작성자로 검색 -- `idx_rag_minutes_embedding`: 벡터 유사도 검색 (IVFFlat 인덱스) -- `idx_rag_minutes_full_content_gin`: Full-text 검색 (GIN 인덱스) - -## 설치 및 실행 - -### 1. 의존성 설치 - -```bash -cd rag -pip install -r requirements.txt -``` - -### 2. 환경 변수 설정 - -`.env` 파일에 다음 환경 변수 추가: - -```bash -# PostgreSQL -POSTGRES_HOST=4.217.133.186 -POSTGRES_PORT=5432 -POSTGRES_DATABASE=ragdb -POSTGRES_USER=hgzerouser -POSTGRES_PASSWORD=Hi5Jessica! - -# Azure OpenAI (Embedding) -AZURE_OPENAI_API_KEY=your-api-key -AZURE_OPENAI_ENDPOINT=https://api.openai.com/v1/embeddings - -# Azure Event Hub -EVENTHUB_CONNECTION_STRING=Endpoint=sb://hgzero-eventhub-ns.servicebus.windows.net/;... -EVENTHUB_NAME=hgzero-eventhub-name -AZURE_EVENTHUB_CONSUMER_GROUP=$Default -AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=hgzerostorage;... -AZURE_STORAGE_CONTAINER_NAME=hgzero-checkpoints -``` - -### 3. 데이터베이스 초기화 - -```bash -cd rag -python scripts/init_rag_minutes.py -``` - -이 스크립트는 다음 작업을 수행합니다: -- `rag_minutes` 테이블 생성 -- 필요한 인덱스 생성 -- pgvector 확장 설치 확인 - -### 4. Event Hub Consumer 시작 - -```bash -cd rag -python start_consumer.py -``` - -Consumer는 백그라운드에서 실행되며 Event Hub로부터 회의록 확정 이벤트를 수신합니다. - -### 5. API 서버 시작 - -```bash -cd rag/src -python -m api.main -``` - -또는: - -```bash -cd rag -uvicorn src.api.main:app --host 0.0.0.0 --port 8000 --reload -``` - -## API 사용 예시 - -### 1. 연관 회의록 검색 - -**요청**: - -```bash -curl -X POST "http://localhost:8000/api/minutes/search" \ - -H "Content-Type: application/json" \ - -d '{ - "query": "2025년 1분기 마케팅 전략 수립 및 실행 계획", - "top_k": 5, - "similarity_threshold": 0.7 - }' -``` - -**응답**: - -```json -[ - { - "minutes": { - "meeting_id": "MTG-2025-001", - "title": "2025 Q1 마케팅 전략 회의", - "minutes_id": "MIN-2025-001", - "full_content": "...", - "sections": [...] - }, - "similarity_score": 0.92 - }, - { - "minutes": { - "meeting_id": "MTG-2024-098", - "title": "2024 Q4 마케팅 결산", - "minutes_id": "MIN-2024-098", - "full_content": "...", - "sections": [...] - }, - "similarity_score": 0.85 - } -] -``` - -### 2. 회의록 상세 조회 - -**요청**: - -```bash -curl "http://localhost:8000/api/minutes/MIN-2025-001" -``` - -**응답**: - -```json -{ - "meeting_id": "MTG-2025-001", - "title": "2025 Q1 마케팅 전략 회의", - "purpose": "2025년 1분기 마케팅 전략 수립", - "minutes_id": "MIN-2025-001", - "minutes_status": "FINALIZED", - "sections": [ - { - "section_id": "SEC-001", - "type": "DISCUSSION", - "title": "시장 분석", - "content": "2025년 시장 동향 분석...", - "order": 1, - "verified": true - } - ], - "full_content": "...", - "created_at": "2025-01-15T10:30:00", - "finalized_at": "2025-01-15T12:00:00" -} -``` - -### 3. 통계 조회 - -**요청**: - -```bash -curl "http://localhost:8000/api/minutes/stats" -``` - -**응답**: - -```json -{ - "total_minutes": 150, - "total_meetings": 145, - "total_authors": 25, - "latest_finalized_at": "2025-01-20T15:30:00" -} -``` - -## Event Hub 메시지 형식 - -Meeting 서비스에서 발행하는 회의록 확정 이벤트 형식: - -```json -{ - "event_type": "MINUTES_FINALIZED", - "timestamp": "2025-01-15T12:00:00Z", - "data": { - "meeting_id": "MTG-2025-001", - "title": "2025 Q1 마케팅 전략 회의", - "purpose": "2025년 1분기 마케팅 전략 수립", - "description": "...", - "scheduled_at": "2025-01-15T10:00:00", - "location": "본사 3층 회의실", - "organizer_id": "organizer@example.com", - "minutes_id": "MIN-2025-001", - "status": "FINALIZED", - "version": 1, - "created_by": "user@example.com", - "finalized_by": "user@example.com", - "finalized_at": "2025-01-15T12:00:00", - "sections": [ - { - "section_id": "SEC-001", - "type": "DISCUSSION", - "title": "시장 분석", - "content": "2025년 시장 동향 분석...", - "order": 1, - "verified": true - } - ] - } -} -``` - -## 성능 최적화 - -### 1. Vector Search 최적화 - -- **IVFFlat 인덱스**: 대량의 벡터 데이터에 대한 근사 검색 -- **lists 파라미터**: 데이터 크기에 따라 조정 (기본값: 100) -- **Cosine Distance**: 유사도 측정에 최적화된 거리 메트릭 - -### 2. Full-text Search - -- **GIN 인덱스**: 텍스트 검색 성능 향상 -- **to_tsvector**: PostgreSQL의 Full-text Search 기능 활용 - -### 3. Embedding 생성 - -- **배치 처리**: 여러 회의록을 동시에 처리할 때 배치 API 활용 -- **캐싱**: 동일한 내용에 대한 중복 embedding 생성 방지 - -## 모니터링 - -### 1. 로그 - -- **Consumer 로그**: `logs/rag-consumer.log` -- **API 로그**: `logs/rag-api.log` - -### 2. 메트릭 - -- 초당 처리 이벤트 수 -- 평균 embedding 생성 시간 -- 평균 검색 응답 시간 -- 데이터베이스 연결 상태 - -## 문제 해결 - -### 1. Event Hub 연결 실패 - -```bash -# 연결 문자열 확인 -echo $EVENTHUB_CONNECTION_STRING - -# Event Hub 상태 확인 (Azure Portal) -``` - -### 2. Embedding 생성 실패 - -```bash -# OpenAI API 키 확인 -echo $AZURE_OPENAI_API_KEY - -# API 할당량 확인 (OpenAI Dashboard) -``` - -### 3. 데이터베이스 연결 실패 - -```bash -# PostgreSQL 연결 확인 -psql -h $POSTGRES_HOST -U $POSTGRES_USER -d $POSTGRES_DATABASE - -# pgvector 확장 확인 -SELECT * FROM pg_extension WHERE extname = 'vector'; -``` - -## 향후 개선 사항 - -1. **하이브리드 검색**: Keyword + Vector 검색 결합 -2. **재랭킹**: 검색 결과 재정렬 알고리즘 추가 -3. **메타데이터 필터링**: 날짜, 작성자, 카테고리 등으로 필터링 -4. **설명 생성**: Claude AI를 활용한 유사 회의록 관계 설명 -5. **배치 처리**: 대량의 과거 회의록 일괄 처리 - -## 참고 자료 - -- [pgvector](https://github.com/pgvector/pgvector): PostgreSQL의 Vector 확장 -- [Azure Event Hubs](https://docs.microsoft.com/azure/event-hubs/): Azure Event Hubs 문서 -- [OpenAI Embeddings](https://platform.openai.com/docs/guides/embeddings): OpenAI Embedding API 가이드 diff --git a/rag/TESTING.md b/rag/TESTING.md deleted file mode 100644 index 0362079..0000000 --- a/rag/TESTING.md +++ /dev/null @@ -1,508 +0,0 @@ -# Vector DB 통합 시스템 테스트 가이드 - -## 목차 -1. [사전 준비](#사전-준비) -2. [환경 설정](#환경-설정) -3. [데이터베이스 설정](#데이터베이스-설정) -4. [데이터 로딩 테스트](#데이터-로딩-테스트) -5. [API 서버 실행](#api-서버-실행) -6. [API 엔드포인트 테스트](#api-엔드포인트-테스트) -7. [자동화 테스트](#자동화-테스트) -8. [문제 해결](#문제-해결) - ---- - -## 사전 준비 - -### 필수 소프트웨어 -- Python 3.9 이상 -- PostgreSQL 14 이상 (pgvector 확장 지원) -- Redis (선택사항, 캐싱용) - -### Azure 서비스 -- Azure OpenAI Service (임베딩 생성용) -- Azure AI Search (관련 문서 검색용) - ---- - -## 환경 설정 - -### 1. 가상환경 생성 및 활성화 - -```bash -cd vector -python -m venv venv - -# Linux/Mac -source venv/bin/activate - -# Windows -venv\Scripts\activate -``` - -### 2. 의존성 설치 - -```bash -pip install -r requirements.txt -``` - -### 3. 환경 변수 설정 - -`.env.example` 파일을 `.env`로 복사하고 실제 값으로 수정: - -```bash -cp .env.example .env -``` - -`.env` 파일 수정 예시: - -```bash -# PostgreSQL -POSTGRES_HOST=localhost -POSTGRES_PORT=5432 -POSTGRES_DATABASE=meeting_db -POSTGRES_USER=postgres -POSTGRES_PASSWORD=your_actual_password - -# Azure OpenAI -AZURE_OPENAI_API_KEY=your_actual_api_key -AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com - -# Azure AI Search -AZURE_SEARCH_ENDPOINT=https://your-search-service.search.windows.net -AZURE_SEARCH_API_KEY=your_actual_api_key - -# Claude AI -CLAUDE_API_KEY=your_actual_claude_api_key - -# Redis -REDIS_PASSWORD=your_redis_password -``` - ---- - -## 데이터베이스 설정 - -### 1. PostgreSQL 데이터베이스 생성 - -```sql -CREATE DATABASE meeting_db; -``` - -### 2. pgvector 확장 설치 - -PostgreSQL에 연결 후: - -```sql -CREATE EXTENSION IF NOT EXISTS vector; -``` - -### 3. 데이터베이스 초기화 - -용어 데이터 로딩 스크립트를 실행하면 자동으로 테이블이 생성됩니다: - -```bash -python scripts/load_terms.py -``` - ---- - -## 데이터 로딩 테스트 - -### 1. 데이터 로딩 검증 테스트 - -환경 설정 없이도 데이터 파일 로드를 검증할 수 있습니다: - -```bash -python tests/test_data_loading.py -``` - -**예상 출력:** -``` -============================================================ -Vector DB 데이터 로딩 테스트 -============================================================ - -============================================================ -설정 로드 테스트 -============================================================ -✓ 설정 로드 성공 - - PostgreSQL 호스트: localhost - - Azure OpenAI 모델: text-embedding-ada-002 - ... - -============================================================ -용어 데이터 로드 테스트 -============================================================ -✓ terms-01.json 로드 완료: XX개 용어 -✓ terms-02.json 로드 완료: XX개 용어 -... - -총 XXX개 용어 로드 완료 -``` - -### 2. 용어집 데이터 로딩 - -```bash -python scripts/load_terms.py -``` - -**예상 출력:** -``` -============================================================ -용어집 데이터 로딩 시작 -============================================================ -✓ 설정 로드 완료 -✓ PostgreSQL 연결 완료 -✓ 데이터베이스 초기화 완료 -✓ 임베딩 생성기 초기화 완료 -✓ 총 XXX개 용어 로드 완료 -✓ 임베딩 생성 완료 -✓ 삽입 완료: 성공 XXX, 실패 0 - -============================================================ -용어집 통계 -============================================================ -전체 용어: XXX개 -평균 신뢰도: X.XX - -카테고리별 통계: - - 기술용어: XX개 - - 비즈니스용어: XX개 - ... -``` - -### 3. 관련자료 데이터 로딩 - -```bash -python scripts/load_documents.py -``` - -**예상 출력:** -``` -============================================================ -관련자료 데이터 로딩 시작 -============================================================ -✓ 설정 로드 완료 -✓ Azure AI Search 연결 완료 -✓ 인덱스 생성 완료 -✓ 임베딩 생성기 초기화 완료 -✓ 총 XX개 문서 로드 완료 -✓ 총 XXX개 청크 생성 완료 -✓ XXX개 청크 업로드 완료 - -============================================================ -관련자료 통계 -============================================================ -전체 문서: XX개 -전체 청크: XXX개 - -문서 타입별 통계: - - 회의록: XX개 - - 참고자료: XX개 - ... -``` - ---- - -## API 서버 실행 - -### 1. 개발 모드로 실행 - -```bash -python -m src.api.main -``` - -또는: - -```bash -uvicorn src.api.main:app --reload --host 0.0.0.0 --port 8000 -``` - -### 2. 서버 확인 - -브라우저에서 접속: -- API 문서: http://localhost:8000/docs -- 대체 API 문서: http://localhost:8000/redoc -- 루트 엔드포인트: http://localhost:8000/ - ---- - -## API 엔드포인트 테스트 - -### 1. 루트 엔드포인트 테스트 - -```bash -curl http://localhost:8000/ -``` - -**예상 응답:** -```json -{ - "service": "Vector DB 통합 시스템", - "version": "1.0.0", - "endpoints": { - "용어집": "/api/terms/*", - "관련자료": "/api/documents/*" - } -} -``` - -### 2. 용어 검색 테스트 - -#### 키워드 검색 -```bash -curl -X POST http://localhost:8000/api/terms/search \ - -H "Content-Type: application/json" \ - -d '{ - "query": "API", - "search_type": "keyword", - "top_k": 5, - "confidence_threshold": 0.7 - }' -``` - -#### 벡터 검색 -```bash -curl -X POST http://localhost:8000/api/terms/search \ - -H "Content-Type: application/json" \ - -d '{ - "query": "회의 일정 관리", - "search_type": "vector", - "top_k": 3, - "confidence_threshold": 0.6 - }' -``` - -#### 하이브리드 검색 -```bash -curl -X POST http://localhost:8000/api/terms/search \ - -H "Content-Type: application/json" \ - -d '{ - "query": "마이크로서비스", - "search_type": "hybrid", - "top_k": 5, - "confidence_threshold": 0.5 - }' -``` - -### 3. 용어 상세 조회 - -먼저 검색으로 용어 ID를 찾은 후: - -```bash -curl http://localhost:8000/api/terms/{term_id} -``` - -### 4. 용어 설명 생성 (Claude AI) - -```bash -curl -X POST http://localhost:8000/api/terms/{term_id}/explain \ - -H "Content-Type: application/json" \ - -d '{ - "meeting_context": "백엔드 개발 회의에서 REST API 설계 논의" - }' -``` - -### 5. 용어 통계 조회 - -```bash -curl http://localhost:8000/api/terms/stats -``` - -### 6. 관련 문서 검색 - -```bash -curl -X POST http://localhost:8000/api/documents/search \ - -H "Content-Type: application/json" \ - -d '{ - "query": "프로젝트 계획", - "top_k": 3, - "relevance_threshold": 0.3, - "semantic_ranking": true - }' -``` - -#### 필터링된 검색 -```bash -curl -X POST http://localhost:8000/api/documents/search \ - -H "Content-Type: application/json" \ - -d '{ - "query": "회의록", - "top_k": 5, - "relevance_threshold": 0.3, - "document_type": "회의록", - "folder": "프로젝트A", - "semantic_ranking": true - }' -``` - -### 7. 문서 통계 조회 - -```bash -curl http://localhost:8000/api/documents/stats -``` - ---- - -## 자동화 테스트 - -### 1. pytest 설치 확인 - -pytest가 requirements.txt에 포함되어 있어야 합니다. - -### 2. API 테스트 실행 - -서버가 실행 중인 상태에서: - -```bash -pytest tests/test_api.py -v -``` - -**예상 출력:** -``` -tests/test_api.py::test_root PASSED -tests/test_api.py::test_search_terms_keyword PASSED -tests/test_api.py::test_search_terms_vector PASSED -tests/test_api.py::test_search_terms_hybrid PASSED -tests/test_api.py::test_get_term_stats PASSED -tests/test_api.py::test_search_documents PASSED -tests/test_api.py::test_search_documents_with_filters PASSED -tests/test_api.py::test_get_document_stats PASSED -tests/test_api.py::test_get_nonexistent_term PASSED -tests/test_api.py::test_explain_term PASSED -``` - -### 3. 개별 테스트 실행 - -```bash -# 특정 테스트만 실행 -pytest tests/test_api.py::test_search_terms_keyword -v - -# 테스트 상세 출력 -pytest tests/test_api.py -v -s -``` - ---- - -## 문제 해결 - -### 1. PostgreSQL 연결 실패 - -**증상:** -``` -psycopg2.OperationalError: could not connect to server -``` - -**해결:** -- PostgreSQL이 실행 중인지 확인 -- .env 파일의 데이터베이스 접속 정보 확인 -- 방화벽 설정 확인 - -### 2. pgvector 확장 오류 - -**증상:** -``` -psycopg2.errors.UndefinedObject: type "vector" does not exist -``` - -**해결:** -```sql -CREATE EXTENSION IF NOT EXISTS vector; -``` - -### 3. Azure OpenAI API 오류 - -**증상:** -``` -openai.error.AuthenticationError: Incorrect API key provided -``` - -**해결:** -- .env 파일의 AZURE_OPENAI_API_KEY 확인 -- Azure Portal에서 API 키 재확인 -- API 엔드포인트 URL 확인 - -### 4. Azure AI Search 인덱스 생성 실패 - -**증상:** -``` -azure.core.exceptions.HttpResponseError: (Unauthorized) Access denied -``` - -**해결:** -- .env 파일의 AZURE_SEARCH_API_KEY 확인 -- Azure Portal에서 API 키 및 권한 확인 -- 인덱스 이름 중복 여부 확인 - -### 5. 임베딩 생성 실패 - -**증상:** -``` -RateLimitError: Rate limit exceeded -``` - -**해결:** -- Azure OpenAI의 Rate Limit 확인 -- 배치 크기를 줄여서 재시도 -- 재시도 로직이 자동으로 작동하므로 대기 - -### 6. Claude API 오류 - -**증상:** -``` -anthropic.APIError: Invalid API Key -``` - -**해결:** -- .env 파일의 CLAUDE_API_KEY 확인 -- API 키 유효성 확인 -- 호출 빈도 제한 확인 - ---- - -## 성능 테스트 - -### 1. 검색 응답 시간 측정 - -```bash -time curl -X POST http://localhost:8000/api/terms/search \ - -H "Content-Type: application/json" \ - -d '{ - "query": "API", - "search_type": "hybrid", - "top_k": 10 - }' -``` - -### 2. 동시 요청 테스트 - -Apache Bench를 사용한 부하 테스트: - -```bash -ab -n 100 -c 10 http://localhost:8000/ -``` - ---- - -## 다음 단계 - -1. **프로덕션 배포 준비** - - 환경별 설정 분리 (dev/staging/prod) - - 로깅 및 모니터링 설정 - - 보안 강화 (API 키 관리, HTTPS) - -2. **성능 최적화** - - Redis 캐싱 활성화 - - 인덱스 튜닝 - - 쿼리 최적화 - -3. **기능 확장** - - 사용자 인증/인가 - - 용어 버전 관리 - - 문서 업데이트 자동화 - -4. **통합 테스트** - - E2E 테스트 작성 - - CI/CD 파이프라인 구축 - - 자동화된 성능 테스트 diff --git a/rag/README.md b/rag/docs/README.md similarity index 100% rename from rag/README.md rename to rag/docs/README.md diff --git a/rag/eventhub_guide.md b/rag/eventhub_guide.md deleted file mode 100644 index 7e911e9..0000000 --- a/rag/eventhub_guide.md +++ /dev/null @@ -1,378 +0,0 @@ -# Event Hub Consumer Guide - -## 핵심 개념: Partition Ownership (파티션 소유권) - -Event Hub에서는 **같은 Consumer Group 내에서 하나의 파티션은 동시에 오직 하나의 Consumer만 읽을 수 있습니다**. 이를 "Exclusive Consumer" 패턴이라고 합니다. - -## 왜 이런 제약이 있나요? - -### 1. 순서 보장 (Ordering) - -``` -파티션 0: [이벤트1] → [이벤트2] → [이벤트3] - -❌ 잘못된 경우 (여러 Consumer가 동시 읽기): -Consumer A: 이벤트1 처리 중... (느림) -Consumer B: 이벤트2 처리 완료 ✓ -Consumer C: 이벤트3 처리 완료 ✓ -→ 처리 순서: 2 → 3 → 1 (순서 뒤바뀜!) - -✅ 올바른 경우 (하나의 Consumer만): -Consumer A: 이벤트1 ✓ → 이벤트2 ✓ → 이벤트3 ✓ -→ 처리 순서: 1 → 2 → 3 (순서 보장!) -``` - -### 2. Checkpoint 일관성 - -``` -❌ 여러 Consumer가 각자 checkpoint: -Consumer A: offset 100까지 읽음 → checkpoint 저장 -Consumer B: offset 150까지 읽음 → checkpoint 덮어씀 -Consumer A 재시작 → offset 150부터 읽음 → offset 100~149 누락! - -✅ 하나의 Consumer만: -Consumer A: offset 100 → 110 → 120 → ... (순차적) -재시작 시 → 마지막 checkpoint부터 정확히 재개 -``` - -### 3. 중복 처리 방지 - -``` -❌ 여러 Consumer가 동일 이벤트 읽기: -Consumer A: 주문 이벤트 처리 → 결제 완료 -Consumer B: 동일 주문 이벤트 처리 → 중복 결제! - -✅ 하나의 Consumer만: -Consumer A: 주문 이벤트 처리 → 1번만 결제 ✓ -``` - -## Ownership Claim 메커니즘 - -### 동작 과정 - -``` -Consumer A (PID 51257) - 먼저 시작 - ↓ -Blob Storage에 파티션 0 소유권 요청 - ↓ -✅ 승인 (Owner: A, Lease: 30초) - ↓ -30초마다 Lease 갱신 - ↓ -계속 소유권 유지 - - -Consumer B (테스트) - 나중에 시작 - ↓ -Blob Storage에 파티션 0 소유권 요청 - ↓ -❌ 거부 (이미 A가 소유 중) - ↓ -"hasn't claimed an ownership" 로그 - ↓ -계속 재시도 (대기 상태) -``` - -### Blob Storage에 저장되는 정보 - -```json -{ - "partitionId": "0", - "ownerIdentifier": "73fda457-b555-4af5-873a-54a2baa5fd95", - "lastModifiedTime": "2025-10-29T02:17:49Z", - "eTag": "\"0x8DCF7E8F9B3C1A0\"", - "offset": "120259090624", - "sequenceNumber": 232 -} -``` - -## 현재 상황 분석 - -``` -Event Hub: hgzero-eventhub-name -├─ 파티션 수: 1개 (파티션 0) -└─ Consumer Group: $Default - -실행 중: -├─ Consumer A (PID 51257): 파티션 0 소유 ✅ -│ ├─ 이벤트 정상 수신 중 -│ ├─ Lease 주기적 갱신 중 -│ └─ Checkpoint 저장 중 -│ -└─ 테스트 Consumer들: 소유권 없음 ❌ - ├─ 파티션 0 claim 시도 - ├─ 계속 거부당함 - ├─ "hasn't claimed an ownership" 로그 - └─ 이벤트 수신 불가 -``` - -## 해결 방법 - -### Option 1: 기존 Consumer 종료 후 재시작 - -```bash -# 기존 Consumer 종료 -kill 51257 - -# 새로 시작 -cd /Users/daewoong/home/workspace/HGZero/rag -python start_consumer.py -``` - -**장점**: 간단 -**단점**: 다운타임 발생 (Lease 만료까지 최대 30초) - -### Option 2: 다른 Consumer Group 사용 (권장) - -```yaml -# config.yaml -eventhub: - consumer_group: "test-group" # $Default 대신 사용 -``` - -**장점**: -- 기존 Consumer에 영향 없음 -- 독립적으로 모든 이벤트 읽기 가능 -- 개발/테스트에 이상적 - -**단점**: 리소스 추가 사용 - -### Option 3: 파티션 수평 확장 - -``` -Event Hub 파티션 증가: 1개 → 3개 -Consumer 실행: 3개 - -분산: -├─ Consumer A: 파티션 0 -├─ Consumer B: 파티션 1 -└─ Consumer C: 파티션 2 - -→ 병렬 처리로 3배 성능 향상! -``` - -**장점**: 높은 처리량 -**단점**: 비용 증가, 전체 순서는 보장 안 됨 (파티션 내 순서만 보장) - -## Consumer Group 비교 - -``` -┌─────────────────────────────────────────┐ -│ Event Hub: hgzero-eventhub │ -│ 파티션 0: [이벤트들...] │ -└─────────────────────────────────────────┘ - │ - ├─────────────────┬─────────────────┐ - │ │ │ - Consumer Group Consumer Group Consumer Group - "$Default" "analytics" "backup" - │ │ │ - Consumer A Consumer B Consumer C - (RAG 처리) (분석 처리) (백업 처리) - │ │ │ - 각자 독립적으로 동일한 파티션 0의 모든 이벤트 읽음 - 각자 독립적인 Checkpoint 유지 -``` - -## 파티션과 Consumer 수 관계 - -### Case 1: Consumer 1개 -``` -Event Hub: 파티션 3개 (P0, P1, P2) -Consumer Group: $Default - -├─ Consumer A: P0, P1, P2 모두 소유 -└─ 모든 파티션 처리 (순차적) -``` - -### Case 2: Consumer 3개 (이상적) -``` -Event Hub: 파티션 3개 (P0, P1, P2) -Consumer Group: $Default - -├─ Consumer A: P0 소유 -├─ Consumer B: P1 소유 -└─ Consumer C: P2 소유 - -→ 병렬 처리로 최대 성능! -``` - -### Case 3: Consumer 5개 (과잉) -``` -Event Hub: 파티션 3개 (P0, P1, P2) -Consumer Group: $Default - -├─ Consumer A: P0 소유 -├─ Consumer B: P1 소유 -├─ Consumer C: P2 소유 -├─ Consumer D: 소유한 파티션 없음 (대기) -└─ Consumer E: 소유한 파티션 없음 (대기) - -→ D, E는 이벤트를 읽지 못하고 대기만 함 -``` - -## 베스트 프랙티스 - -| 환경 | Consumer 수 | Consumer Group | 파티션 수 | -|------|-------------|----------------|-----------| -| **프로덕션** | = 파티션 수 | production | 처리량에 맞게 | -| **개발** | 1개 | development | 1~2개 | -| **테스트** | 1개 | test | 1개 | -| **분석** | 1개 | analytics | (공유) | - -### 권장 사항 - -1. **프로덕션 환경** - - Consumer 수 = 파티션 수 (1:1 매핑) - - 고가용성을 위해 각 Consumer를 다른 서버에 배치 - - Consumer 수 > 파티션 수로 설정하면 일부는 대기 상태 (Standby) - -2. **개발/테스트 환경** - - 별도 Consumer Group 사용 - - 파티션 1개로 충분 - - 필요시 checkpoint를 초기화하여 처음부터 재처리 - -3. **모니터링** - - Ownership claim 실패 로그 모니터링 - - Lease 갱신 실패 알림 설정 - - Checkpoint lag 모니터링 - -4. **장애 복구** - - Lease timeout 고려 (기본 30초) - - Consumer 장애 시 자동 재분배 (30초 이내) - - Checkpoint로부터 정확한 위치에서 재개 - -## Consumer 프로세스 관리 명령어 - -### 프로세스 확인 - -```bash -# Consumer 프로세스 확인 -ps aux | grep "start_consumer.py" | grep -v grep - -# 상세 정보 (실행시간, CPU, 메모리) -ps -p -o pid,etime,%cpu,%mem,cmd - -# 네트워크 연결 확인 -lsof -i -n | grep - -# 모든 Python 프로세스 확인 -ps aux | grep python | grep -v grep -``` - -### 프로세스 종료 - -```bash -# 정상 종료 (SIGTERM) -kill - -# 강제 종료 (SIGKILL) -kill -9 - -# 이름으로 종료 -pkill -f start_consumer.py -``` - -## 테스트 이벤트 전송 - -```python -from azure.eventhub import EventHubProducerClient, EventData -import json -import os -from dotenv import load_dotenv - -load_dotenv('rag/.env') - -conn_str = os.getenv('EVENTHUB_CONNECTION_STRING') -eventhub_name = os.getenv('EVENTHUB_NAME') - -test_event = { - 'eventType': 'MINUTES_FINALIZED', - 'data': { - 'meetingId': 'test-meeting-001', - 'title': '테스트 회의', - 'minutesId': 'test-minutes-001', - 'sections': [ - { - 'sectionId': 'section-001', - 'type': 'DISCUSSION', - 'title': '논의 사항', - 'content': '테스트 논의 내용입니다.', - 'order': 1, - 'verified': True - } - ] - } -} - -producer = EventHubProducerClient.from_connection_string( - conn_str=conn_str, - eventhub_name=eventhub_name -) - -event_data_batch = producer.create_batch() -event_data_batch.add(EventData(json.dumps(test_event))) - -producer.send_batch(event_data_batch) -print('✅ 테스트 이벤트 전송 완료') - -producer.close() -``` - -## Event Hub 파티션 정보 조회 - -```python -import asyncio -from azure.eventhub.aio import EventHubConsumerClient - -async def check_partitions(): - client = EventHubConsumerClient.from_connection_string( - conn_str=EVENTHUB_CONNECTION_STRING, - consumer_group="$Default", - eventhub_name=EVENTHUB_NAME - ) - - async with client: - partition_ids = await client.get_partition_ids() - print(f"파티션 개수: {len(partition_ids)}") - print(f"파티션 IDs: {partition_ids}") - - for partition_id in partition_ids: - props = await client.get_partition_properties(partition_id) - print(f"\n파티션 {partition_id}:") - print(f" 시퀀스 번호: {props['last_enqueued_sequence_number']}") - print(f" 오프셋: {props['last_enqueued_offset']}") - print(f" 마지막 이벤트 시간: {props['last_enqueued_time_utc']}") - -asyncio.run(check_partitions()) -``` - -## 정리 - -### "에러"가 아니라 "설계된 동작"입니다 - -1. ✅ **정상**: Consumer A가 파티션 소유 → 이벤트 처리 -2. ✅ **정상**: Consumer B가 claim 실패 → 대기 -3. ✅ **정상**: Consumer A 종료 시 → Consumer B가 자동 인수 - -### 이 메커니즘의 장점 - -- 📌 **순서 보장**: 파티션 내 이벤트 순서 유지 -- 📌 **정확히 한 번 처리**: 중복 처리 방지 -- 📌 **자동 장애 복구**: Consumer 장애 시 자동 재분배 -- 📌 **수평 확장**: 파티션 추가로 처리량 증가 - -### 현재 상황 해결 - -**권장**: 다른 Consumer Group을 사용하여 테스트하시는 것이 가장 안전하고 효율적입니다! - -```yaml -# 개발/테스트용 Consumer Group 설정 -eventhub: - consumer_group: "development" # 또는 "test" -``` - -이렇게 하면: -- 기존 프로덕션 Consumer에 영향 없음 -- 독립적으로 모든 이벤트를 처음부터 읽을 수 있음 -- 여러 번 테스트 가능 diff --git a/rag/install-pgvector.md b/rag/install-pgvector.md deleted file mode 100644 index 941fab5..0000000 --- a/rag/install-pgvector.md +++ /dev/null @@ -1,595 +0,0 @@ -# pgvector Extension PostgreSQL 설치 가이드 - -## 개요 -벡터 유사도 검색을 위한 pgvector extension이 포함된 PostgreSQL 데이터베이스 설치 가이드입니다. - ---- - -## 1. 사전 요구사항 - -### 1.1 필수 확인 사항 -- [ ] Kubernetes 클러스터 접속 가능 여부 확인 -- [ ] Helm 3.x 이상 설치 확인 -- [ ] kubectl 명령어 사용 가능 여부 확인 -- [ ] 기본 StorageClass 존재 여부 확인 - -### 1.2 버전 정보 -| 구성요소 | 버전 | 비고 | -|---------|------|------| -| PostgreSQL | 16.x | pgvector 0.5.0 이상 지원 | -| pgvector Extension | 0.5.1+ | 최신 안정 버전 권장 | -| Helm Chart | bitnami/postgresql | pgvector 포함 커스텀 이미지 | - ---- - -## 2. 설치 방법 - -### 2.1 Kubernetes 환경 (Helm Chart) - -#### 2.1.1 개발 환경 (dev) - -**Step 1: Namespace 생성** -```bash -kubectl create namespace vector-dev -``` - -**Step 2: Helm Repository 추가** -```bash -helm repo add bitnami https://charts.bitnami.com/bitnami -helm repo update -``` - -**Step 3: values.yaml 작성** -```yaml -# values-pgvector-dev.yaml -global: - postgresql: - auth: - postgresPassword: "dev_password" - username: "vector_user" - password: "dev_vector_password" - database: "vector_db" - -image: - registry: docker.io - repository: pgvector/pgvector - tag: "pg16" - pullPolicy: IfNotPresent - -primary: - initdb: - scripts: - init-pgvector.sql: | - -- pgvector extension 활성화 - CREATE EXTENSION IF NOT EXISTS vector; - - -- 설치 확인 - SELECT extname, extversion FROM pg_extension WHERE extname = 'vector'; - - resources: - limits: - memory: 2Gi - cpu: 1000m - requests: - memory: 1Gi - cpu: 500m - - persistence: - enabled: true - size: 10Gi - storageClass: "" # 기본 StorageClass 사용 - - service: - type: ClusterIP - ports: - postgresql: 5432 - -metrics: - enabled: true - serviceMonitor: - enabled: false - -volumePermissions: - enabled: true -``` - -**Step 4: Helm 설치 실행** -```bash -helm install pgvector-dev bitnami/postgresql \ - --namespace vector-dev \ - --values values-pgvector-dev.yaml \ - --wait -``` - -**Step 5: 설치 확인** -```bash -# Pod 상태 확인 -kubectl get pods -n vector-dev - -# 서비스 확인 -kubectl get svc -n vector-dev - -# pgvector 설치 확인 -kubectl exec -it pgvector-dev-postgresql-0 -n vector-dev -- \ - psql -U vector_user -d vector_db -c "SELECT extname, extversion FROM pg_extension WHERE extname = 'vector';" -``` - -**예상 출력:** -``` - extname | extversion ----------+------------ - vector | 0.5.1 -(1 row) -``` - -#### 2.1.2 운영 환경 (prod) - -**Step 1: Namespace 생성** -```bash -kubectl create namespace vector-prod -``` - -**Step 2: values.yaml 작성 (고가용성 구성)** -```yaml -# values-pgvector-prod.yaml -global: - postgresql: - auth: - postgresPassword: "CHANGE_ME_PROD_PASSWORD" - username: "vector_user" - password: "CHANGE_ME_VECTOR_PASSWORD" - database: "vector_db" - -image: - registry: docker.io - repository: pgvector/pgvector - tag: "pg16" - pullPolicy: IfNotPresent - -architecture: replication # 고가용성 구성 - -primary: - initdb: - scripts: - init-pgvector.sql: | - -- pgvector extension 활성화 - CREATE EXTENSION IF NOT EXISTS vector; - - -- 성능 최적화 설정 - ALTER SYSTEM SET shared_buffers = '2GB'; - ALTER SYSTEM SET effective_cache_size = '6GB'; - ALTER SYSTEM SET maintenance_work_mem = '512MB'; - ALTER SYSTEM SET max_wal_size = '2GB'; - - -- pgvector 최적화 - ALTER SYSTEM SET max_parallel_workers_per_gather = 4; - - resources: - limits: - memory: 8Gi - cpu: 4000m - requests: - memory: 4Gi - cpu: 2000m - - persistence: - enabled: true - size: 100Gi - storageClass: "" # 기본 StorageClass 사용 - - podAntiAffinity: - preset: hard # Primary와 Replica 분리 배치 - -readReplicas: - replicaCount: 2 - - resources: - limits: - memory: 8Gi - cpu: 4000m - requests: - memory: 4Gi - cpu: 2000m - - persistence: - enabled: true - size: 100Gi - -backup: - enabled: true - cronjob: - schedule: "0 2 * * *" # 매일 새벽 2시 백업 - storage: - size: 50Gi - -metrics: - enabled: true - serviceMonitor: - enabled: true - -networkPolicy: - enabled: true - allowExternal: false -``` - -**Step 3: Helm 설치 실행** -```bash -helm install pgvector-prod bitnami/postgresql \ - --namespace vector-prod \ - --values values-pgvector-prod.yaml \ - --wait -``` - -**Step 4: 설치 확인** -```bash -# 모든 Pod 상태 확인 (Primary + Replicas) -kubectl get pods -n vector-prod - -# Replication 상태 확인 -kubectl exec -it pgvector-prod-postgresql-0 -n vector-prod -- \ - psql -U postgres -c "SELECT * FROM pg_stat_replication;" -``` - ---- - -### 2.2 Docker Compose 환경 (로컬 개발) - -**docker-compose.yml** -```yaml -version: '3.8' - -services: - pgvector: - image: pgvector/pgvector:pg16 - container_name: pgvector-local - environment: - POSTGRES_DB: vector_db - POSTGRES_USER: vector_user - POSTGRES_PASSWORD: local_password - POSTGRES_INITDB_ARGS: "-E UTF8 --locale=C" - ports: - - "5432:5432" - volumes: - - pgvector_data:/var/lib/postgresql/data - - ./init-scripts:/docker-entrypoint-initdb.d - command: - - "postgres" - - "-c" - - "shared_buffers=256MB" - - "-c" - - "max_connections=200" - healthcheck: - test: ["CMD-SHELL", "pg_isready -U vector_user -d vector_db"] - interval: 10s - timeout: 5s - retries: 5 - restart: unless-stopped - -volumes: - pgvector_data: - driver: local -``` - -**init-scripts/01-init-pgvector.sql** -```sql --- pgvector extension 활성화 -CREATE EXTENSION IF NOT EXISTS vector; - --- 테스트 테이블 생성 (선택사항) -CREATE TABLE IF NOT EXISTS vector_test ( - id SERIAL PRIMARY KEY, - content TEXT, - embedding vector(384) -- 384차원 벡터 (예시) -); - --- 인덱스 생성 (HNSW - 고성능) -CREATE INDEX ON vector_test -USING hnsw (embedding vector_cosine_ops); - --- 확인 쿼리 -SELECT extname, extversion FROM pg_extension WHERE extname = 'vector'; -``` - -**실행 명령** -```bash -# 시작 -docker-compose up -d - -# 로그 확인 -docker-compose logs -f pgvector - -# 접속 테스트 -docker exec -it pgvector-local psql -U vector_user -d vector_db - -# 종료 -docker-compose down -``` - ---- - -## 3. 설치 검증 - -### 3.1 Extension 설치 확인 -```sql --- Extension 버전 확인 -SELECT extname, extversion FROM pg_extension WHERE extname = 'vector'; - --- 지원 연산자 확인 -SELECT oprname, oprleft::regtype, oprright::regtype -FROM pg_operator -WHERE oprname IN ('<=>', '<->', '<#>'); -``` - -**예상 결과:** -``` - oprname | oprleft | oprright ----------+---------+---------- - <=> | vector | vector - <-> | vector | vector - <#> | vector | vector -``` - -### 3.2 벡터 연산 테스트 -```sql --- 테스트 데이터 삽입 -CREATE TABLE test_vectors ( - id SERIAL PRIMARY KEY, - embedding vector(3) -); - -INSERT INTO test_vectors (embedding) VALUES -('[1,2,3]'), -('[4,5,6]'), -('[1,1,1]'); - --- 코사인 거리 계산 테스트 -SELECT id, embedding, embedding <=> '[1,2,3]' AS cosine_distance -FROM test_vectors -ORDER BY cosine_distance -LIMIT 3; -``` - -### 3.3 인덱스 성능 테스트 -```sql --- HNSW 인덱스 생성 -CREATE INDEX ON test_vectors USING hnsw (embedding vector_cosine_ops); - --- 인덱스 사용 여부 확인 -EXPLAIN ANALYZE -SELECT id FROM test_vectors -ORDER BY embedding <=> '[1,2,3]' -LIMIT 10; -``` - ---- - -## 4. 연결 정보 - -### 4.1 Kubernetes 환경 - -**개발 환경 (cluster 내부)** -``` -Host: pgvector-dev-postgresql.vector-dev.svc.cluster.local -Port: 5432 -Database: vector_db -Username: vector_user -Password: dev_vector_password -``` - -**운영 환경 (cluster 내부)** -``` -Host: pgvector-prod-postgresql.vector-prod.svc.cluster.local -Port: 5432 -Database: vector_db -Username: vector_user -Password: CHANGE_ME_VECTOR_PASSWORD -``` - -**외부 접속 (Port-Forward)** -```bash -# 개발 환경 -kubectl port-forward -n vector-dev svc/pgvector-dev-postgresql 5432:5432 - -# 운영 환경 -kubectl port-forward -n vector-prod svc/pgvector-prod-postgresql 5433:5432 -``` - -### 4.2 Docker Compose 환경 -``` -Host: localhost -Port: 5432 -Database: vector_db -Username: vector_user -Password: local_password -``` - ---- - -## 5. Python 연결 예제 - -### 5.1 필수 라이브러리 -```bash -pip install psycopg2-binary pgvector -``` - -### 5.2 연결 코드 -```python -import psycopg2 -from pgvector.psycopg2 import register_vector - -# 연결 -conn = psycopg2.connect( - host="localhost", - port=5432, - database="vector_db", - user="vector_user", - password="local_password" -) - -# pgvector 타입 등록 -register_vector(conn) - -# 벡터 검색 예제 -cur = conn.cursor() -cur.execute(""" - SELECT id, embedding <=> %s::vector AS distance - FROM test_vectors - ORDER BY distance - LIMIT 5 -""", ([1, 2, 3],)) - -results = cur.fetchall() -for row in results: - print(f"ID: {row[0]}, Distance: {row[1]}") - -cur.close() -conn.close() -``` - ---- - -## 6. 트러블슈팅 - -### 6.1 Extension 설치 실패 -```sql --- 에러: extension "vector" is not available --- 해결: pgvector 이미지 사용 확인 -``` -**확인 명령:** -```bash -# Pod의 이미지 확인 -kubectl describe pod pgvector-dev-postgresql-0 -n vector-dev | grep Image -``` - -### 6.2 인덱스 생성 실패 -```sql --- 에러: operator class "vector_cosine_ops" does not exist --- 해결: Extension 재생성 -DROP EXTENSION vector CASCADE; -CREATE EXTENSION vector; -``` - -### 6.3 성능 이슈 -```sql --- 인덱스 통계 업데이트 -ANALYZE test_vectors; - --- HNSW 파라미터 조정 (m=16, ef_construction=64) -CREATE INDEX ON test_vectors -USING hnsw (embedding vector_cosine_ops) -WITH (m = 16, ef_construction = 64); -``` - ---- - -## 7. 보안 권장사항 - -### 7.1 비밀번호 관리 -```bash -# Kubernetes Secret 생성 -kubectl create secret generic pgvector-credentials \ - --from-literal=postgres-password='STRONG_PASSWORD' \ - --from-literal=password='STRONG_VECTOR_PASSWORD' \ - -n vector-prod - -# values.yaml에서 참조 -global: - postgresql: - auth: - existingSecret: "pgvector-credentials" -``` - -### 7.2 네트워크 정책 -```yaml -# network-policy.yaml -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: pgvector-policy - namespace: vector-prod -spec: - podSelector: - matchLabels: - app.kubernetes.io/name: postgresql - policyTypes: - - Ingress - ingress: - - from: - - namespaceSelector: - matchLabels: - name: vector-prod - - podSelector: - matchLabels: - app: vector-service - ports: - - protocol: TCP - port: 5432 -``` - ---- - -## 8. 모니터링 - -### 8.1 Prometheus Metrics (운영 환경) -```yaml -# ServiceMonitor가 활성화된 경우 자동 수집 -metrics: - enabled: true - serviceMonitor: - enabled: true - namespace: monitoring - interval: 30s -``` - -### 8.2 주요 메트릭 -- `pg_up`: PostgreSQL 가용성 -- `pg_database_size_bytes`: 데이터베이스 크기 -- `pg_stat_database_tup_fetched`: 조회된 행 수 -- `pg_stat_database_conflicts`: 복제 충돌 수 - ---- - -## 9. 백업 및 복구 - -### 9.1 수동 백업 -```bash -# Kubernetes 환경 -kubectl exec -n vector-prod pgvector-prod-postgresql-0 -- \ - pg_dump -U vector_user vector_db > backup_$(date +%Y%m%d).sql - -# Docker Compose 환경 -docker exec pgvector-local pg_dump -U vector_user vector_db > backup.sql -``` - -### 9.2 복구 -```bash -# Kubernetes 환경 -cat backup.sql | kubectl exec -i pgvector-prod-postgresql-0 -n vector-prod -- \ - psql -U vector_user -d vector_db - -# Docker Compose 환경 -cat backup.sql | docker exec -i pgvector-local psql -U vector_user -d vector_db -``` - ---- - -## 10. 참고 자료 - -- [pgvector GitHub](https://github.com/pgvector/pgvector) -- [PostgreSQL Documentation](https://www.postgresql.org/docs/16/) -- [Bitnami PostgreSQL Helm Chart](https://github.com/bitnami/charts/tree/main/bitnami/postgresql) -- [pgvector Performance Tips](https://github.com/pgvector/pgvector#performance) - ---- - -## 부록: 차원별 인덱스 권장사항 - -| 벡터 차원 | 인덱스 타입 | 파라미터 | 비고 | -|----------|-----------|---------|------| -| < 768 | HNSW | m=16, ef_construction=64 | 일반적인 임베딩 | -| 768-1536 | HNSW | m=24, ef_construction=100 | OpenAI ada-002 | -| > 1536 | IVFFlat | lists=100 | 매우 높은 차원 | - -**인덱스 선택 가이드:** -- **HNSW**: 검색 속도 우선 (메모리 사용량 높음) -- **IVFFlat**: 메모리 절약 우선 (검색 속도 느림) diff --git a/rag/requirements.txt b/rag/requirements.txt index 05041fd..b70c488 100644 --- a/rag/requirements.txt +++ b/rag/requirements.txt @@ -3,6 +3,7 @@ fastapi==0.104.1 uvicorn[standard]==0.24.0 pydantic==2.5.0 pydantic-settings==2.1.0 +sse-starlette==1.8.2 # Database psycopg2-binary==2.9.9 @@ -50,7 +51,6 @@ structlog==23.2.0 pytest==7.4.3 pytest-asyncio==0.21.1 pytest-cov==4.1.0 -httpx==0.25.2 # Development black==23.12.0 diff --git a/rag/check_active_consumers.py b/rag/scripts/check_active_consumers.py similarity index 100% rename from rag/check_active_consumers.py rename to rag/scripts/check_active_consumers.py diff --git a/rag/src/api/__pycache__/main.cpython-311.pyc b/rag/src/api/__pycache__/main.cpython-311.pyc index 4a523ac..fa862d5 100644 Binary files a/rag/src/api/__pycache__/main.cpython-311.pyc and b/rag/src/api/__pycache__/main.cpython-311.pyc differ diff --git a/rag/src/api/__pycache__/minutes_routes.cpython-311.pyc b/rag/src/api/__pycache__/minutes_routes.cpython-311.pyc new file mode 100644 index 0000000..1bd4a97 Binary files /dev/null and b/rag/src/api/__pycache__/minutes_routes.cpython-311.pyc differ diff --git a/rag/src/api/__pycache__/term_routes.cpython-311.pyc b/rag/src/api/__pycache__/term_routes.cpython-311.pyc new file mode 100644 index 0000000..800a2de Binary files /dev/null and b/rag/src/api/__pycache__/term_routes.cpython-311.pyc differ diff --git a/rag/src/api/main.py b/rag/src/api/main.py index b1e989b..ef30ce5 100644 --- a/rag/src/api/main.py +++ b/rag/src/api/main.py @@ -5,6 +5,7 @@ from fastapi import FastAPI, HTTPException, Depends from fastapi.middleware.cors import CORSMiddleware from typing import List, Dict, Any import logging +import asyncio from pathlib import Path from ..models.term import ( @@ -30,10 +31,13 @@ from ..db.postgres_vector import PostgresVectorDB from ..db.azure_search import AzureAISearchDB from ..db.rag_minutes_db import RagMinutesDB from ..services.claude_service import ClaudeService +from ..services.sse_manager import sse_manager from ..utils.config import load_config, get_database_url from ..utils.embedding import EmbeddingGenerator from ..utils.text_processor import extract_nouns_as_query from ..utils.redis_cache import RedisCache +from . import term_routes +from . import minutes_routes # 로깅 설정 logging.basicConfig( @@ -58,6 +62,65 @@ app.add_middleware( allow_headers=["*"], ) +# SSE 라우터 등록 +app.include_router(term_routes.router) +app.include_router(minutes_routes.router) + + +# 앱 시작/종료 이벤트 핸들러 +@app.on_event("startup") +async def startup_event(): + """앱 시작 시 SSE Manager 및 EventHub Consumer 시작""" + global _eventhub_consumer_task + + # SSE Manager 시작 + await sse_manager.start() + logger.info("SSE Manager 시작 완료") + + # EventHub Consumer를 백그라운드 태스크로 시작 + _eventhub_consumer_task = asyncio.create_task(start_eventhub_consumer()) + logger.info("EventHub Consumer 백그라운드 태스크 시작 완료") + + logger.info("FastAPI 앱 시작 완료") + + +@app.on_event("shutdown") +async def shutdown_event(): + """앱 종료 시 SSE Manager 및 EventHub Consumer 정리""" + global _eventhub_consumer_task + + # EventHub Consumer 태스크 취소 + if _eventhub_consumer_task: + _eventhub_consumer_task.cancel() + try: + await _eventhub_consumer_task + except asyncio.CancelledError: + logger.info("EventHub Consumer 태스크 취소됨") + + # SSE Manager 종료 + await sse_manager.stop() + logger.info("FastAPI 앱 종료 완료") + + +async def start_eventhub_consumer(): + """EventHub Consumer 시작 함수""" + try: + from ..services.eventhub_consumer import start_consumer + + config = get_config() + rag_minutes_db = get_rag_minutes_db() + embedding_gen = get_embedding_gen() + term_db = get_term_db() + + logger.info("EventHub Consumer 시작 중...") + await start_consumer(config, rag_minutes_db, embedding_gen, term_db) + + except asyncio.CancelledError: + logger.info("EventHub Consumer 종료 요청 수신") + raise + except Exception as e: + logger.error(f"EventHub Consumer 실행 중 에러: {str(e)}", exc_info=True) + # 전역 변수 (의존성 주입용) _config = None _term_db = None @@ -66,6 +129,7 @@ _rag_minutes_db = None _embedding_gen = None _claude_service = None _redis_cache = None +_eventhub_consumer_task = None def get_config(): @@ -176,6 +240,36 @@ async def root(): } +@app.get("/health") +async def health_check(): + """헬스 체크 엔드포인트""" + global _eventhub_consumer_task + + eventhub_status = "unknown" + if _eventhub_consumer_task: + if _eventhub_consumer_task.done(): + try: + _eventhub_consumer_task.result() + eventhub_status = "stopped" + except Exception as e: + eventhub_status = f"error: {str(e)}" + else: + eventhub_status = "running" + else: + eventhub_status = "not_started" + + return { + "status": "healthy", + "sse_manager": { + "active_sessions": len(sse_manager.get_active_sessions()), + "sessions": sse_manager.get_active_sessions() + }, + "eventhub_consumer": { + "status": eventhub_status + } + } + + @app.post("/api/rag/terms/search", response_model=List[TermSearchResult]) async def search_terms( request: TermSearchRequest, @@ -640,4 +734,4 @@ async def get_related_minutes( if __name__ == "__main__": import uvicorn - uvicorn.run(app, host="0.0.0.0", port=8000) + uvicorn.run(app, host="0.0.0.0", port=8080) diff --git a/rag/src/api/minutes_routes.py b/rag/src/api/minutes_routes.py new file mode 100644 index 0000000..04c9e65 --- /dev/null +++ b/rag/src/api/minutes_routes.py @@ -0,0 +1,93 @@ +""" +연관 회의록 관련 API 엔드포인트 +""" +from fastapi import APIRouter, HTTPException +from sse_starlette.sse import EventSourceResponse +import asyncio +import json +import logging + +from ..services.sse_manager import sse_manager + +logger = logging.getLogger(__name__) +router = APIRouter(prefix="/api/rag/minutes", tags=["minutes"]) + + +@router.get("/stream/{session_id}") +async def stream_related_minutes(session_id: str): + """ + 연관 회의록 검색 결과 SSE 스트림 + + Args: + session_id: 회의 세션 ID + + Returns: + SSE 스트림 + """ + try: + # SSE 연결 등록 + queue = sse_manager.register(session_id) + logger.info(f"연관 회의록 스트림 시작: {session_id}") + + async def event_generator(): + """SSE 이벤트 생성기""" + try: + # 연결 확인 메시지 + yield { + "event": "connected", + "data": json.dumps({"session_id": session_id, "status": "connected"}) + } + + # 메시지 수신 및 전송 + while True: + try: + # Timeout을 두어 주기적으로 heartbeat 전송 + message = await asyncio.wait_for(queue.get(), timeout=30.0) + + yield { + "event": message["event"], + "data": json.dumps(message["data"]) + } + + except asyncio.TimeoutError: + # Heartbeat 전송 + yield { + "event": "heartbeat", + "data": json.dumps({"type": "heartbeat"}) + } + + except asyncio.CancelledError: + logger.info(f"연관 회의록 스트림 취소됨: {session_id}") + except Exception as e: + logger.error(f"이벤트 생성 중 에러: {str(e)}") + finally: + # 연결 정리 + sse_manager.unregister(session_id) + logger.info(f"연관 회의록 스트림 종료: {session_id}") + + return EventSourceResponse(event_generator()) + + except ValueError as e: + raise HTTPException(status_code=429, detail=str(e)) + except Exception as e: + logger.error(f"스트림 시작 실패: {str(e)}") + raise HTTPException(status_code=500, detail="스트림 시작 실패") + + +@router.get("/stream/{session_id}/status") +async def get_stream_status(session_id: str): + """ + 스트림 연결 상태 확인 + + Args: + session_id: 회의 세션 ID + + Returns: + 연결 상태 + """ + is_connected = sse_manager.is_connected(session_id) + + return { + "session_id": session_id, + "connected": is_connected + } diff --git a/rag/src/api/term_routes.py b/rag/src/api/term_routes.py new file mode 100644 index 0000000..8419d44 --- /dev/null +++ b/rag/src/api/term_routes.py @@ -0,0 +1,101 @@ +""" +용어 관련 API 엔드포인트 +""" +from fastapi import APIRouter, HTTPException +from sse_starlette.sse import EventSourceResponse +import asyncio +import json +import logging + +from ..services.sse_manager import sse_manager + +logger = logging.getLogger(__name__) +router = APIRouter(prefix="/api/rag/terms", tags=["terms"]) + + +@router.get("/stream/{session_id}") +async def stream_terms(session_id: str): + """ + 용어 검색 결과 SSE 스트림 + + Args: + session_id: 회의 세션 ID + + Returns: + SSE 스트림 + """ + try: + # SSE 연결 등록 + queue = sse_manager.register(session_id) + logger.info(f"용어 스트림 시작: {session_id}") + + async def event_generator(): + """SSE 이벤트 생성기""" + try: + # 연결 확인 메시지 + yield { + "event": "connected", + "data": json.dumps({"session_id": session_id, "status": "connected"}) + } + + # 메시지 수신 및 전송 + while True: + try: + # Timeout을 두어 주기적으로 heartbeat 전송 + message = await asyncio.wait_for(queue.get(), timeout=30.0) + + yield { + "event": message["event"], + "data": json.dumps(message["data"]) + } + + except asyncio.TimeoutError: + # Heartbeat 전송 + yield { + "event": "heartbeat", + "data": json.dumps({"type": "heartbeat"}) + } + + except asyncio.CancelledError: + logger.info(f"용어 스트림 취소됨: {session_id}") + except Exception as e: + logger.error(f"이벤트 생성 중 에러: {str(e)}") + finally: + # 연결 정리 + sse_manager.unregister(session_id) + logger.info(f"용어 스트림 종료: {session_id}") + + return EventSourceResponse( + event_generator(), + headers={ + "Cache-Control": "no-cache", + "X-Accel-Buffering": "no", + "Access-Control-Allow-Origin": "http://localhost:8000", + "Access-Control-Allow-Credentials": "true", + } + ) + + except ValueError as e: + raise HTTPException(status_code=429, detail=str(e)) + except Exception as e: + logger.error(f"스트림 시작 실패: {str(e)}") + raise HTTPException(status_code=500, detail="스트림 시작 실패") + + +@router.get("/stream/{session_id}/status") +async def get_stream_status(session_id: str): + """ + 스트림 연결 상태 확인 + + Args: + session_id: 회의 세션 ID + + Returns: + 연결 상태 + """ + is_connected = sse_manager.is_connected(session_id) + + return { + "session_id": session_id, + "connected": is_connected + } diff --git a/rag/src/services/__pycache__/eventhub_consumer.cpython-311.pyc b/rag/src/services/__pycache__/eventhub_consumer.cpython-311.pyc index 9555a26..a60373d 100644 Binary files a/rag/src/services/__pycache__/eventhub_consumer.cpython-311.pyc and b/rag/src/services/__pycache__/eventhub_consumer.cpython-311.pyc differ diff --git a/rag/src/services/__pycache__/sse_manager.cpython-311.pyc b/rag/src/services/__pycache__/sse_manager.cpython-311.pyc new file mode 100644 index 0000000..6991407 Binary files /dev/null and b/rag/src/services/__pycache__/sse_manager.cpython-311.pyc differ diff --git a/rag/src/services/eventhub_consumer.py b/rag/src/services/eventhub_consumer.py index e844e25..dddc17f 100644 --- a/rag/src/services/eventhub_consumer.py +++ b/rag/src/services/eventhub_consumer.py @@ -5,6 +5,7 @@ Azure Event Hub Consumer 서비스 import asyncio import json import logging +import re from typing import Dict, Any, Optional, Union, List from datetime import datetime @@ -112,7 +113,13 @@ class EventHubConsumer: try: # 이벤트 데이터 파싱 event_body = event.body_as_str() - event_data = json.loads(event_body) + logger.debug(f"원본 이벤트 데이터 (처음 200자): {event_body[:200]}") + + # Java LocalDateTime 배열을 문자열로 변환하여 JSON 파싱 가능하게 변환 + converted_body = self._convert_java_datetime_arrays(event_body) + logger.debug(f"변환된 이벤트 데이터 (처음 200자): {converted_body[:200]}") + + event_data = json.loads(converted_body) event_type = event_data.get('eventType', 'unknown') logger.info(f"이벤트 수신: {event_type}") @@ -123,7 +130,7 @@ class EventHubConsumer: await self._process_minutes_event(event_data) elif event_type == "SegmentCreated": - # 세그먼트 생성 이벤트 - 용어검색 실행 + # 세그먼트 생성 이벤트 - 용어검색 및 연관 회의록 검색 실행 await self._process_segment_event(event_data) # Checkpoint 업데이트 @@ -132,7 +139,7 @@ class EventHubConsumer: except json.JSONDecodeError as e: logger.error(f"이벤트 파싱 실패: {str(e)}") except Exception as e: - logger.error(f"이벤트 처리 실패: {str(e)}") + logger.error(f"이벤트 처리 실패: {str(e)}", exc_info=True) async def _on_error(self, partition_context, error): """ @@ -144,6 +151,46 @@ class EventHubConsumer: """ logger.error(f"Event Hub 에러 (Partition {partition_context.partition_id}): {str(error)}") + def _convert_java_datetime_arrays(self, json_str: str) -> str: + """ + JSON 문자열 내의 Java LocalDateTime 배열을 ISO 8601 문자열로 변환 + + Java의 Jackson이 LocalDateTime을 배열 형식으로 직렬화하는 것을 + Python이 파싱 가능한 문자열 형식으로 변환 + + Args: + json_str: 원본 JSON 문자열 + + Returns: + 변환된 JSON 문자열 + + Examples: + >>> _convert_java_datetime_arrays('{"timestamp":[2025,10,29,10,25,37,579030000]}') + '{"timestamp":"2025-10-29T10:25:37.579030"}' + """ + # Java LocalDateTime 배열 패턴: [년,월,일,시,분,초,나노초] + # 나노초는 항상 7개 요소로 전송됨 + pattern = r'\[(\d{4}),(\d{1,2}),(\d{1,2}),(\d{1,2}),(\d{1,2}),(\d{1,2}),(\d+)\]' + + def replace_datetime(match): + year = int(match.group(1)) + month = int(match.group(2)) + day = int(match.group(3)) + hour = int(match.group(4)) + minute = int(match.group(5)) + second = int(match.group(6)) + nanosecond = int(match.group(7)) + + # 나노초를 마이크로초로 변환 + microsecond = nanosecond // 1000 + + # ISO 8601 형식 문자열 생성 + dt = datetime(year, month, day, hour, minute, second, microsecond) + return f'"{dt.isoformat()}"' + + # 모든 datetime 배열을 문자열로 변환 + return re.sub(pattern, replace_datetime, json_str) + async def _process_segment_event(self, event_data: Dict[str, Any]): """ 세그먼트 생성 이벤트 처리 - 용어검색 실행 @@ -162,6 +209,9 @@ class EventHubConsumer: text = event_data.get("text", "") meeting_id = event_data.get("meetingId") + # 이벤트 데이터 구조 로깅 (디버깅용) + logger.debug(f"이벤트 데이터 키: {list(event_data.keys())}") + if not text: logger.warning(f"세그먼트 {segment_id}에 텍스트가 없습니다") return @@ -242,12 +292,160 @@ class EventHubConsumer: else: logger.info(f"세그먼트 {segment_id}에서 매칭되는 용어를 찾지 못했습니다") - # 7. 선택적: 검색 결과를 별도 테이블에 저장하거나 Event Hub로 발행 - # TODO: 필요시 검색 결과를 저장하거나 downstream 서비스로 전달 + # 7. SSE를 통해 결과 전송 + # Event Hub 메시지에서 sessionId 추출 (여러 필드 확인) + session_id = event_data.get("meetingId") # front 요청(회의 주최자만 확인 가능 이슈)으로 이벤트의 sessionId 기준이 아닌 meetingId 기준으로 SSE 연동 + # session_id = event_data.get("sessionId") or event_data.get("session_id") or event_data.get("meetingId") or meeting_id + + logger.info(f"SSE 전송 시도: sessionId={session_id}, meetingId={meeting_id}") + + if session_id: + from ..services.sse_manager import sse_manager + + # 용어 정보를 직렬화 가능한 형태로 변환 + terms_data = [] + for result in results: + term = result["term"] + terms_data.append({ + "term_id": term.term_id, + "term_name": term.term_name, + "definition": term.definition, + "category": term.category, + "synonyms": term.synonyms, + "related_terms": term.related_terms, + "context": term.context, + "relevance_score": result["relevance_score"], + "match_type": result.get("match_type", "unknown") + }) + + # SSE로 전송 + success = await sse_manager.send_to_session( + session_id=session_id, + data={ + "segment_id": segment_id, + "meeting_id": meeting_id, + "text": text[:100], # 텍스트 일부만 전송 + "terms": terms_data, + "total_count": len(terms_data) + }, + event_type="term_result" + ) + + if success: + logger.info(f"용어 검색 결과를 SSE로 전송 완료: {session_id}") + else: + logger.warning(f"SSE 전송 실패 (세션 미연결): {session_id}") + else: + logger.warning("이벤트 데이터에 sessionId가 없어 SSE 전송을 건너뜁니다") + + # 8. 연관 회의록 검색 및 SSE 전송 + await self._search_and_send_related_minutes(text, session_id, segment_id, meeting_id) except Exception as e: logger.error(f"세그먼트 이벤트 처리 실패: {str(e)}", exc_info=True) + async def _search_and_send_related_minutes( + self, + text: str, + session_id: Optional[str], + segment_id: str, + meeting_id: str + ): + """ + 연관 회의록 검색 및 SSE 전송 + + Args: + text: 세그먼트 텍스트 + session_id: 세션 ID + segment_id: 세그먼트 ID + meeting_id: 회의 ID + """ + try: + # RAG Minutes DB가 없으면 스킵 + if not self.rag_minutes_db: + logger.debug("RAG Minutes DB가 설정되지 않아 연관 회의록 검색을 스킵합니다") + return + + if not text: + logger.warning(f"세그먼트 {segment_id}에 텍스트가 없어 연관 회의록 검색을 스킵합니다") + return + + logger.info(f"세그먼트 연관 회의록 검색 시작: {segment_id} (회의: {meeting_id})") + logger.info(f"검색 텍스트: {text[:100]}...") + + # 1. 텍스트를 임베딩으로 변환 + query_embedding = self.embedding_gen.generate_embedding(text) + logger.info(f"임베딩 생성 완료: {len(query_embedding)}차원") + + # 2. 연관 회의록 검색 설정 + config = self.config.get("rag_minutes", {}) + search_config = config.get("search", {}) + + top_k = search_config.get("top_k", 5) + similarity_threshold = search_config.get("similarity_threshold", 0.7) + + # 3. 벡터 유사도 검색 + results = self.rag_minutes_db.search_by_vector( + query_embedding=query_embedding, + top_k=top_k, + similarity_threshold=similarity_threshold + ) + + # 4. 검색 결과 로깅 + if results: + logger.info(f"세그먼트 {segment_id} 연관 회의록 검색 완료: {len(results)}개 발견") + for idx, result in enumerate(results, 1): + minutes = result["minutes"] + score = result["similarity_score"] + logger.info( + f" [{idx}] {minutes.title} " + f"(회의 ID: {minutes.meeting_id}, 유사도: {score:.3f})" + ) + else: + logger.info(f"세그먼트 {segment_id}에서 연관 회의록을 찾지 못했습니다") + + # 5. SSE를 통해 결과 전송 + if session_id: + from ..services.sse_manager import sse_manager + + # 회의록 정보를 직렬화 가능한 형태로 변환 + minutes_data = [] + for result in results: + minutes = result["minutes"] + minutes_data.append({ + "minutes_id": minutes.minutes_id, + "meeting_id": minutes.meeting_id, + "title": minutes.title, + "purpose": minutes.purpose, + "scheduled_at": minutes.scheduled_at, + "location": minutes.location, + "finalized_at": minutes.finalized_at, + "similarity_score": result["similarity_score"] + }) + + # SSE로 전송 + success = await sse_manager.send_to_session( + session_id=session_id, + data={ + "segment_id": segment_id, + "meeting_id": meeting_id, + "text": text[:100], # 텍스트 일부만 전송 + "related_minutes": minutes_data, + "total_count": len(minutes_data) + }, + event_type="related_minutes_result" + ) + + if success: + logger.info(f"연관 회의록 검색 결과를 SSE로 전송 완료: {session_id}") + else: + logger.warning(f"SSE 전송 실패 (세션 미연결): {session_id}") + else: + logger.warning("세션 ID가 없어 연관 회의록 SSE 전송을 건너뜁니다") + + except Exception as e: + logger.error(f"연관 회의록 검색 및 전송 실패: {str(e)}", exc_info=True) + def _convert_datetime_array_to_string(self, value: Union[str, List, None]) -> Optional[str]: """ Java LocalDateTime 배열을 ISO 8601 문자열로 변환 diff --git a/rag/src/services/sse_manager.py b/rag/src/services/sse_manager.py new file mode 100644 index 0000000..fc70320 --- /dev/null +++ b/rag/src/services/sse_manager.py @@ -0,0 +1,183 @@ +""" +SSE(Server-Sent Events) 연결 관리자 +""" +import asyncio +import logging +from typing import Dict, Any, Optional +from datetime import datetime + +logger = logging.getLogger(__name__) + + +class SSEManager: + """SSE 연결 관리자""" + + def __init__(self, max_connections: int = 1000, heartbeat_interval: int = 30): + """ + 초기화 + + Args: + max_connections: 최대 동시 연결 수 + heartbeat_interval: Heartbeat 전송 간격 (초) + """ + self._connections: Dict[str, asyncio.Queue] = {} + self._last_activity: Dict[str, datetime] = {} + self.max_connections = max_connections + self.heartbeat_interval = heartbeat_interval + self._cleanup_task: Optional[asyncio.Task] = None + + async def start(self): + """SSE Manager 시작 - 정리 태스크 실행""" + self._cleanup_task = asyncio.create_task(self._cleanup_inactive_connections()) + logger.info("SSE Manager 시작됨") + + async def stop(self): + """SSE Manager 중지""" + if self._cleanup_task: + self._cleanup_task.cancel() + self._connections.clear() + self._last_activity.clear() + logger.info("SSE Manager 중지됨") + + def register(self, session_id: str) -> asyncio.Queue: + """ + 새 SSE 연결 등록 + + Args: + session_id: 세션 ID + + Returns: + 메시지 큐 + + Raises: + ValueError: 최대 연결 수 초과 시 + """ + if len(self._connections) >= self.max_connections: + raise ValueError(f"최대 연결 수({self.max_connections})를 초과했습니다") + + if session_id in self._connections: + logger.warning(f"세션 {session_id}가 이미 연결되어 있습니다") + return self._connections[session_id] + + queue = asyncio.Queue(maxsize=100) + self._connections[session_id] = queue + self._last_activity[session_id] = datetime.now() + + logger.info(f"SSE 연결 등록: {session_id} (전체 연결 수: {len(self._connections)})") + return queue + + def unregister(self, session_id: str): + """ + SSE 연결 제거 + + Args: + session_id: 세션 ID + """ + if session_id in self._connections: + del self._connections[session_id] + del self._last_activity[session_id] + logger.info(f"SSE 연결 제거: {session_id} (전체 연결 수: {len(self._connections)})") + + async def send_to_session(self, session_id: str, data: Dict[str, Any], event_type: str = "message") -> bool: + """ + 특정 세션에 데이터 전송 + + Args: + session_id: 세션 ID + data: 전송할 데이터 + event_type: 이벤트 타입 + + Returns: + 전송 성공 여부 + """ + if session_id not in self._connections: + logger.warning(f"세션 {session_id}가 연결되어 있지 않습니다") + return False + + try: + message = { + "event": event_type, + "data": data, + "timestamp": datetime.now().isoformat() + } + + queue = self._connections[session_id] + + # 큐가 가득 차면 오래된 메시지 제거 + if queue.full(): + try: + queue.get_nowait() + logger.warning(f"세션 {session_id} 큐가 가득 차서 오래된 메시지를 제거했습니다") + except asyncio.QueueEmpty: + pass + + await queue.put(message) + self._last_activity[session_id] = datetime.now() + + logger.debug(f"메시지 전송 성공: {session_id} (이벤트: {event_type})") + return True + + except Exception as e: + logger.error(f"메시지 전송 실패: {session_id}, 에러: {str(e)}") + return False + + async def send_heartbeat(self, session_id: str) -> bool: + """ + Heartbeat 전송 + + Args: + session_id: 세션 ID + + Returns: + 전송 성공 여부 + """ + return await self.send_to_session( + session_id, + {"type": "heartbeat"}, + event_type="heartbeat" + ) + + def is_connected(self, session_id: str) -> bool: + """ + 연결 상태 확인 + + Args: + session_id: 세션 ID + + Returns: + 연결 여부 + """ + return session_id in self._connections + + def get_active_sessions(self) -> list: + """활성 세션 목록 반환""" + return list(self._connections.keys()) + + async def _cleanup_inactive_connections(self): + """비활성 연결 정리 (백그라운드 태스크)""" + timeout_minutes = 30 + + while True: + try: + await asyncio.sleep(60) # 1분마다 확인 + + now = datetime.now() + inactive_sessions = [] + + for session_id, last_time in self._last_activity.items(): + elapsed = (now - last_time).total_seconds() / 60 + if elapsed > timeout_minutes: + inactive_sessions.append(session_id) + + for session_id in inactive_sessions: + logger.info(f"비활성 세션 제거: {session_id} ({timeout_minutes}분 초과)") + self.unregister(session_id) + + except asyncio.CancelledError: + break + except Exception as e: + logger.error(f"연결 정리 중 에러: {str(e)}") + + +# 전역 SSE Manager 인스턴스 +sse_manager = SSEManager() diff --git a/rag/start_all.sh b/rag/start_all.sh deleted file mode 100644 index d4c9d11..0000000 --- a/rag/start_all.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash -# RAG 서비스 - API 서버와 Event Hub Consumer 동시 실행 스크립트 - -set -e # 에러 발생 시 스크립트 종료 - -echo "==========================================" -echo "RAG 서비스 시작" -echo "==========================================" - -# 로그 디렉토리 생성 -mkdir -p logs - -# Event Hub Consumer를 백그라운드로 실행 -echo "[1/2] Event Hub Consumer 시작..." -python start_consumer.py > logs/consumer.log 2>&1 & -CONSUMER_PID=$! -echo "Consumer PID: $CONSUMER_PID" - -# API 서버 시작 (포그라운드) -echo "[2/2] REST API 서버 시작..." -python -m uvicorn src.api.main:app --host 0.0.0.0 --port 8000 & -API_PID=$! -echo "API Server PID: $API_PID" - -# PID 파일 저장 -echo $CONSUMER_PID > logs/consumer.pid -echo $API_PID > logs/api.pid - -echo "==========================================" -echo "RAG 서비스 시작 완료" -echo " - API Server: http://0.0.0.0:8000" -echo " - Consumer PID: $CONSUMER_PID" -echo " - API PID: $API_PID" -echo "==========================================" - -# 종료 시그널 처리 (graceful shutdown) -trap "echo 'Shutting down...'; kill $CONSUMER_PID $API_PID; exit 0" SIGTERM SIGINT - -# 두 프로세스 모두 실행 중인지 모니터링 -while kill -0 $CONSUMER_PID 2>/dev/null && kill -0 $API_PID 2>/dev/null; do - sleep 5 -done - -# 하나라도 종료되면 모두 종료 -echo "One of the processes stopped. Shutting down all..." -kill $CONSUMER_PID $API_PID 2>/dev/null || true -wait diff --git a/rag/start_all_services.py b/rag/start_all_services.py deleted file mode 100644 index 56e0887..0000000 --- a/rag/start_all_services.py +++ /dev/null @@ -1,180 +0,0 @@ -""" -RAG 서비스 통합 실행 스크립트 -API 서버와 Event Hub Consumer를 동시에 실행 -""" -import asyncio -import logging -import multiprocessing -import signal -import sys -import time -from pathlib import Path - -import uvicorn - -from src.utils.config import load_config, get_database_url -from src.db.rag_minutes_db import RagMinutesDB -from src.db.postgres_vector import PostgresVectorDB -from src.utils.embedding import EmbeddingGenerator -from src.services.eventhub_consumer import start_consumer - -# 로깅 설정 -logging.basicConfig( - level=logging.INFO, - format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' -) -logger = logging.getLogger(__name__) - - -def run_api_server(): - """ - REST API 서버 실행 (별도 프로세스) - """ - try: - logger.info("=" * 50) - logger.info("REST API 서버 시작") - logger.info("=" * 50) - - uvicorn.run( - "src.api.main:app", - host="0.0.0.0", - port=8000, - log_level="info", - access_log=True - ) - except Exception as e: - logger.error(f"API 서버 실행 실패: {str(e)}") - sys.exit(1) - - -def run_event_consumer(): - """ - Event Hub Consumer 실행 (별도 프로세스) - """ - try: - logger.info("=" * 50) - logger.info("Event Hub Consumer 시작") - logger.info("=" * 50) - - # 설정 로드 - config_path = Path(__file__).parent / "config.yaml" - config = load_config(str(config_path)) - - # 데이터베이스 연결 - db_url = get_database_url(config) - rag_minutes_db = RagMinutesDB(db_url) - logger.info("RAG Minutes DB 연결 완료") - - # 용어집 데이터베이스 연결 - term_db = PostgresVectorDB(db_url) - logger.info("용어집 DB 연결 완료") - - # Embedding 생성기 초기화 - azure_openai = config["azure_openai"] - embedding_gen = EmbeddingGenerator( - api_key=azure_openai["api_key"], - endpoint=azure_openai["endpoint"], - model=azure_openai["embedding_model"], - dimension=azure_openai["embedding_dimension"], - api_version=azure_openai["api_version"] - ) - logger.info("Embedding 생성기 초기화 완료") - - # Event Hub Consumer 시작 - asyncio.run(start_consumer(config, rag_minutes_db, embedding_gen, term_db)) - - except KeyboardInterrupt: - logger.info("Consumer 종료 신호 수신") - except Exception as e: - logger.error(f"Consumer 실행 실패: {str(e)}") - sys.exit(1) - - -def main(): - """ - 메인 함수: 두 프로세스를 생성하고 관리 - """ - logger.info("=" * 60) - logger.info("RAG 서비스 통합 시작") - logger.info(" - REST API 서버: http://0.0.0.0:8000") - logger.info(" - Event Hub Consumer: Background") - logger.info("=" * 60) - - # 프로세스 생성 - api_process = multiprocessing.Process( - target=run_api_server, - name="API-Server" - ) - consumer_process = multiprocessing.Process( - target=run_event_consumer, - name="Event-Consumer" - ) - - # 종료 시그널 핸들러 - def signal_handler(signum, frame): - logger.info("\n종료 신호 수신. 프로세스 종료 중...") - - if api_process.is_alive(): - logger.info("API 서버 종료 중...") - api_process.terminate() - api_process.join(timeout=5) - if api_process.is_alive(): - api_process.kill() - - if consumer_process.is_alive(): - logger.info("Consumer 종료 중...") - consumer_process.terminate() - consumer_process.join(timeout=5) - if consumer_process.is_alive(): - consumer_process.kill() - - logger.info("모든 프로세스 종료 완료") - sys.exit(0) - - # 시그널 핸들러 등록 - signal.signal(signal.SIGTERM, signal_handler) - signal.signal(signal.SIGINT, signal_handler) - - try: - # 프로세스 시작 - api_process.start() - time.sleep(2) # API 서버 시작 대기 - - consumer_process.start() - time.sleep(2) # Consumer 시작 대기 - - logger.info("=" * 60) - logger.info("모든 서비스 시작 완료") - logger.info(f" - API Server PID: {api_process.pid}") - logger.info(f" - Consumer PID: {consumer_process.pid}") - logger.info("=" * 60) - - # 프로세스 모니터링 - while True: - if not api_process.is_alive(): - logger.error("API 서버 프로세스 종료됨") - consumer_process.terminate() - break - - if not consumer_process.is_alive(): - logger.error("Consumer 프로세스 종료됨") - api_process.terminate() - break - - time.sleep(5) - - # 대기 - api_process.join() - consumer_process.join() - - except Exception as e: - logger.error(f"서비스 실행 중 에러: {str(e)}") - api_process.terminate() - consumer_process.terminate() - sys.exit(1) - - -if __name__ == "__main__": - # multiprocessing을 위한 설정 - multiprocessing.set_start_method('spawn', force=True) - main() diff --git a/rag/start_consumer.py b/rag/start_consumer.py deleted file mode 100644 index 7d35fbd..0000000 --- a/rag/start_consumer.py +++ /dev/null @@ -1,62 +0,0 @@ -import asyncio -import logging -from pathlib import Path - -from src.utils.config import load_config, get_database_url -from src.db.rag_minutes_db import RagMinutesDB -from src.db.postgres_vector import PostgresVectorDB -from src.utils.embedding import EmbeddingGenerator -from src.services.eventhub_consumer import start_consumer - -# 로깅 설정 -logging.basicConfig( - level=logging.INFO, - format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' -) -logger = logging.getLogger(__name__) - - -async def main(): - """메인 함수""" - try: - # 설정 로드 - config_path = Path(__file__).parent / "config.yaml" - config = load_config(str(config_path)) - logger.info(config) - - logger.info("설정 로드 완료") - - # 데이터베이스 연결 - db_url = get_database_url(config) - rag_minutes_db = RagMinutesDB(db_url) - logger.info("RAG Minutes DB 연결 완료") - - # 용어집 데이터베이스 연결 - term_db = PostgresVectorDB(db_url) - logger.info("용어집 DB 연결 완료") - - # Embedding 생성기 초기화 - azure_openai = config["azure_openai"] - embedding_gen = EmbeddingGenerator( - api_key=azure_openai["api_key"], - endpoint=azure_openai["endpoint"], - model=azure_openai["embedding_model"], - dimension=azure_openai["embedding_dimension"], - api_version=azure_openai["api_version"] - ) - - logger.info("Embedding 생성기 초기화 완료") - - # Event Hub Consumer 시작 - logger.info("Event Hub Consumer 시작...") - await start_consumer(config, rag_minutes_db, embedding_gen, term_db) - - except KeyboardInterrupt: - logger.info("프로그램 종료") - except Exception as e: - logger.error(f"에러 발생: {str(e)}") - raise - - -if __name__ == "__main__": - asyncio.run(main()) diff --git a/rag/test_noun_extraction.py b/rag/test_noun_extraction.py deleted file mode 100644 index 3330242..0000000 --- a/rag/test_noun_extraction.py +++ /dev/null @@ -1,37 +0,0 @@ -""" -명사 추출 기능 테스트 -""" -import sys -from pathlib import Path - -# 프로젝트 루트 경로를 sys.path에 추가 -project_root = Path(__file__).parent -sys.path.insert(0, str(project_root)) - -from src.utils.text_processor import extract_nouns, extract_nouns_as_query - - -def test_extract_nouns(): - """명사 추출 테스트""" - test_cases = [ - "안녕하세요. 오늘은 OFDM 기술 관련하여 회의를 진행하겠습니다.", - "5G 네트워크와 AI 기술을 활용한 자율주행 자동차", - "데이터베이스 설계 및 API 개발", - "클라우드 컴퓨팅 환경에서 마이크로서비스 아키텍처 구현" - ] - - print("=" * 80) - print("명사 추출 테스트") - print("=" * 80) - - for text in test_cases: - print(f"\n원본: {text}") - nouns = extract_nouns(text) - print(f"명사: {nouns}") - query = extract_nouns_as_query(text) - print(f"쿼리: {query}") - print("-" * 80) - - -if __name__ == "__main__": - test_extract_nouns() diff --git a/rag/test_sse.html b/rag/test_sse.html new file mode 100644 index 0000000..409d44b --- /dev/null +++ b/rag/test_sse.html @@ -0,0 +1,851 @@ + + + + + + SSE 용어 검색 및 연관 회의록 테스트 + + + +
+
+

🔍 SSE 용어 검색 및 연관 회의록 테스트

+

실시간 용어 검색 및 연관 회의록 결과를 확인하세요

+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + + + +
+
+ +
+
+ + 연결 안됨 +
+
+ 용어 수신: 0 +
+
+ 회의록 수신: 0 +
+
+ +
+
+
+
+ 📊 용어 검색 결과 + 0건 +
+
+
+ + + +

연결 후 용어 검색 결과가 여기에 표시됩니다

+
+
+
+ +
+
+ 📝 연관 회의록 결과 + 0건 +
+
+
+ + + +

연결 후 연관 회의록 결과가 여기에 표시됩니다

+
+
+
+
+ +

📝 로그

+
+
+

로그가 여기에 표시됩니다

+
+
+
+
+ + + + diff --git a/settings.gradle b/settings.gradle index 876b850..32fdc43 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,5 +4,5 @@ include 'common' include 'user' include 'meeting' include 'stt' -include 'ai' +// include 'ai' // AI 서비스는 Python(ai-python)으로 구현됨 include 'notification' diff --git a/stt/.run/stt.run.xml b/stt/.run/stt.run.xml deleted file mode 100644 index 598caeb..0000000 --- a/stt/.run/stt.run.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - true - true - - - - - false - false - - - \ No newline at end of file diff --git a/stt/src/main/java/com/unicorn/hgzero/stt/config/SecurityConfig.java b/stt/src/main/java/com/unicorn/hgzero/stt/config/SecurityConfig.java index 8fa689d..c7fdcde 100644 --- a/stt/src/main/java/com/unicorn/hgzero/stt/config/SecurityConfig.java +++ b/stt/src/main/java/com/unicorn/hgzero/stt/config/SecurityConfig.java @@ -52,7 +52,7 @@ public class SecurityConfig { // 허용할 헤더 configuration.setAllowedHeaders(Arrays.asList( "Authorization", "Content-Type", "X-Requested-With", "Accept", - "Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers" + "Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers", "X-User-Id", "X-User-Name", "X-User-Email" )); // 자격 증명 허용 diff --git a/stt/src/main/java/com/unicorn/hgzero/stt/controller/AudioWebSocketHandler.java b/stt/src/main/java/com/unicorn/hgzero/stt/controller/AudioWebSocketHandler.java index 3d1438e..d359421 100644 --- a/stt/src/main/java/com/unicorn/hgzero/stt/controller/AudioWebSocketHandler.java +++ b/stt/src/main/java/com/unicorn/hgzero/stt/controller/AudioWebSocketHandler.java @@ -2,7 +2,7 @@ package com.unicorn.hgzero.stt.controller; import com.fasterxml.jackson.databind.ObjectMapper; import com.unicorn.hgzero.stt.dto.AudioChunkDto; -import com.unicorn.hgzero.stt.service.AudioBufferService; +import com.unicorn.hgzero.stt.service.InMemoryAudioBufferService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -24,7 +24,7 @@ import java.util.concurrent.ConcurrentHashMap; @RequiredArgsConstructor public class AudioWebSocketHandler extends AbstractWebSocketHandler { - private final AudioBufferService audioBufferService; + private final InMemoryAudioBufferService audioBufferService; private final ObjectMapper objectMapper; // 세션별 회의 ID 매핑 diff --git a/stt/src/main/java/com/unicorn/hgzero/stt/event/TranscriptionEvent.java b/stt/src/main/java/com/unicorn/hgzero/stt/event/TranscriptionEvent.java index a9bdd68..57196c4 100644 --- a/stt/src/main/java/com/unicorn/hgzero/stt/event/TranscriptionEvent.java +++ b/stt/src/main/java/com/unicorn/hgzero/stt/event/TranscriptionEvent.java @@ -25,6 +25,7 @@ public class TranscriptionEvent { private String segmentId; private String recordingId; private String meetingId; + private String sessionId; private String text; private String speakerId; private String speakerName; @@ -34,7 +35,7 @@ public class TranscriptionEvent { private Boolean warningFlag; private LocalDateTime eventTime; - public static SegmentCreated of(String segmentId, String recordingId, String meetingId, + public static SegmentCreated of(String segmentId, String recordingId, String meetingId, String sessionId, String text, String speakerId, String speakerName, LocalDateTime timestamp, Double duration, Double confidence, Boolean warningFlag) { return SegmentCreated.builder() @@ -43,6 +44,7 @@ public class TranscriptionEvent { .segmentId(segmentId) .recordingId(recordingId) .meetingId(meetingId) + .sessionId(sessionId) .text(text) .speakerId(speakerId) .speakerName(speakerName) diff --git a/stt/src/main/java/com/unicorn/hgzero/stt/event/publisher/EventHubPublisher.java b/stt/src/main/java/com/unicorn/hgzero/stt/event/publisher/EventHubPublisher.java index bd883fb..da4083f 100644 --- a/stt/src/main/java/com/unicorn/hgzero/stt/event/publisher/EventHubPublisher.java +++ b/stt/src/main/java/com/unicorn/hgzero/stt/event/publisher/EventHubPublisher.java @@ -1,74 +1,127 @@ package com.unicorn.hgzero.stt.event.publisher; +import com.azure.messaging.eventhubs.EventData; +import com.azure.messaging.eventhubs.EventDataBatch; +import com.azure.messaging.eventhubs.EventHubClientBuilder; +import com.azure.messaging.eventhubs.EventHubProducerClient; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; import java.util.concurrent.CompletableFuture; /** * Azure Event Hub 이벤트 발행자 구현체 - * Azure Event Hubs를 통한 이벤트 발행 기능 + * Azure Event Hubs를 통한 실제 이벤트 발행 기능 + * + * 환경변수 설정: + * - EVENTHUB_CONNECTION_STRING: Azure Event Hub 연결 문자열 + * - EVENTHUB_NAME: Event Hub 이름 + * + * 이벤트 발행 프로세스: + * 1. @PostConstruct에서 EventHubProducerClient 초기화 + * 2. publishAsync() 호출 시 비동기로 이벤트 발행 + * 3. AI Python 서비스에서 Event Hub를 구독하여 실시간 처리 */ @Slf4j @Component @RequiredArgsConstructor public class EventHubPublisher implements EventPublisher { - + private final ObjectMapper objectMapper; - + + @Value("${azure.eventhub.connection-string}") + private String connectionString; + + @Value("${azure.eventhub.name}") + private String eventHubName; + + private EventHubProducerClient producerClient; + + /** + * Event Hub Producer Client 초기화 + */ + @PostConstruct + public void initialize() { + if (connectionString == null || connectionString.isEmpty()) { + log.warn("Event Hub 연결 문자열이 설정되지 않음 - Event Hub 발행 비활성화"); + return; + } + + try { + producerClient = new EventHubClientBuilder() + .connectionString(connectionString, eventHubName) + .buildProducerClient(); + + log.info("Event Hub Producer Client 초기화 완료 - EventHub: {}", eventHubName); + } catch (Exception e) { + log.error("Event Hub Producer Client 초기화 실패", e); + throw new RuntimeException("Event Hub 연결에 실패했습니다", e); + } + } + + /** + * 애플리케이션 종료 시 Producer Client 정리 + */ + @PreDestroy + public void cleanup() { + if (producerClient != null) { + try { + producerClient.close(); + log.info("Event Hub Producer Client 종료 완료"); + } catch (Exception e) { + log.error("Event Hub Producer Client 종료 중 오류", e); + } + } + } + @Override public void publish(String topic, Object event) { + if (producerClient == null) { + log.warn("Event Hub가 연결되지 않음 - 이벤트 발행 건너뜀"); + return; + } + try { String eventData = objectMapper.writeValueAsString(event); - - // 실제로는 Azure Event Hubs SDK 사용 - // EventHubProducerClient producer = createProducer(topic); - // EventDataBatch batch = producer.createBatch(); - // batch.tryAdd(new EventData(eventData)); - // producer.send(batch); - - // 시뮬레이션 - simulateEventHubPublish(topic, eventData); - - log.info("이벤트 발행 완료 - topic: {}, event: {}", topic, event.getClass().getSimpleName()); - + + // Event Data Batch 생성 및 전송 + EventDataBatch batch = producerClient.createBatch(); + + // 이벤트 추가 + boolean added = batch.tryAdd(new EventData(eventData)); + if (!added) { + log.error("이벤트가 배치 크기를 초과하여 추가 실패 - 데이터 길이: {}", eventData.length()); + throw new RuntimeException("이벤트 배치 추가 실패"); + } + + // Event Hub로 전송 + producerClient.send(batch); + + log.info("✅ 이벤트 발행 완료 - EventHub: {}, EventType: {}, 데이터 길이: {}자", + eventHubName, event.getClass().getSimpleName(), eventData.length()); + log.debug("발행된 데이터: {}", eventData); + } catch (Exception e) { - log.error("이벤트 발행 실패 - topic: {}, event: {}", topic, event.getClass().getSimpleName(), e); + log.error("이벤트 발행 실패 - EventHub: {}, EventType: {}", + eventHubName, event.getClass().getSimpleName(), e); throw new RuntimeException("이벤트 발행에 실패했습니다", e); } } - + @Override public void publishAsync(String topic, Object event) { CompletableFuture.runAsync(() -> { try { publish(topic, event); } catch (Exception e) { - log.error("비동기 이벤트 발행 실패 - topic: {}, event: {}", topic, event.getClass().getSimpleName(), e); + log.error("비동기 이벤트 발행 실패 - EventHub: {}, EventType: {}", + eventHubName, event.getClass().getSimpleName(), e); } }); } - - /** - * Azure Event Hub 발행 시뮬레이션 - */ - private void simulateEventHubPublish(String topic, String eventData) { - log.debug("Event Hub 발행 시뮬레이션:"); - log.debug("Topic: {}", topic); - log.debug("Event Data: {}", eventData); - - // 실제로는 다음과 같은 Azure Event Hubs 코드 사용: - /* - EventHubProducerClient producer = new EventHubClientBuilder() - .connectionString(connectionString, eventHubName) - .buildProducerClient(); - - EventDataBatch batch = producer.createBatch(); - batch.tryAdd(new EventData(eventData)); - producer.send(batch); - producer.close(); - */ - } -} \ No newline at end of file +} diff --git a/stt/src/main/java/com/unicorn/hgzero/stt/service/AudioBatchProcessor.java b/stt/src/main/java/com/unicorn/hgzero/stt/service/AudioBatchProcessor.java index 78f68fd..dbc163f 100644 --- a/stt/src/main/java/com/unicorn/hgzero/stt/service/AudioBatchProcessor.java +++ b/stt/src/main/java/com/unicorn/hgzero/stt/service/AudioBatchProcessor.java @@ -15,30 +15,44 @@ import java.util.Set; import java.util.UUID; /** - * 오디오 배치 프로세서 - * 5초마다 Redis에 축적된 오디오를 처리하여 텍스트로 변환 + * 오디오 배치 프로세서 (2단계 처리) * - * Note: STT 결과는 DB에 저장하지 않고, Event Hub와 WebSocket으로만 전송 - * 최종 회의록은 AI 서비스에서 저장 + * 1단계 (STT): 5초마다 짧은 세그먼트 변환 + * - 빠른 음성 인식으로 실시간 피드백 + * - WebSocket으로 클라이언트에 즉시 표시 + * - Event Hub로 AI 서비스에 전송 (누적) + * + * 2단계 (AI): AI 서비스에서 1분치 세그먼트로 제안사항 생성 + * - Redis 누적 텍스트 (4-5개 세그먼트) 분석 + * - SSE로 실시간 제안사항 전송 + * + * Note: STT 결과는 DB 저장 없음, Event Hub와 WebSocket으로만 전송 */ @Slf4j @Service @RequiredArgsConstructor public class AudioBatchProcessor { - private final AudioBufferService audioBufferService; + private final InMemoryAudioBufferService audioBufferService; private final AzureSpeechService azureSpeechService; private final EventPublisher eventPublisher; private final AudioWebSocketHandler webSocketHandler; /** - * 5초마다 오디오 배치 처리 + * 7초마다 오디오 배치 처리 (실시간 STT) * - Redis에서 오디오 청크 조회 - * - Azure Speech로 텍스트 변환 - * - Event Hub 이벤트 발행 (AI 서비스로 전송) - * - WebSocket 실시간 전송 (클라이언트 표시) + * - Azure Speech로 텍스트 변환 (적절한 길이의 세그먼트) + * - Event Hub 이벤트 발행 (AI 서비스로 전송, 누적됨) + * - WebSocket 실시간 전송 (클라이언트에 즉시 표시) + * + * 7초 선택 이유: + * - 문장 완성도: 대부분의 발화가 완료되는 시간 + * - 실시간성: 사용자가 즉각 피드백 확인 가능 + * - Azure Speech 호환: recognizeOnceAsync() 최대 15초 이내 + * + * AI 제안사항은 AI 서비스에서 별도로 생성 (약 1분치 누적 분석) */ - @Scheduled(fixedDelay = 5000, initialDelay = 10000) // 5초마다 실행, 최초 10초 후 시작 + @Scheduled(fixedDelay = 7000, initialDelay = 7000) // 7초마다 실행 public void processAudioBatch() { try { // 활성 회의 목록 조회 @@ -68,7 +82,7 @@ public class AudioBatchProcessor { */ private void processOneMeeting(String meetingId) { try { - // Redis에서 최근 5초 오디오 청크 조회 + // Redis에서 최근 7초 오디오 청크 조회 List chunks = audioBufferService.getAudioChunks(meetingId); if (chunks.isEmpty()) { @@ -78,7 +92,7 @@ public class AudioBatchProcessor { log.info("오디오 청크 조회 완료 - meetingId: {}, chunks: {}개", meetingId, chunks.size()); - // 오디오 청크 병합 (5초 분량) + // 오디오 청크 병합 (7초 분량) byte[] mergedAudio = audioBufferService.mergeAudioChunks(chunks); if (mergedAudio.length == 0) { @@ -102,7 +116,7 @@ public class AudioBatchProcessor { // WebSocket으로 실시간 결과 전송 (클라이언트 표시) sendTranscriptToClients(meetingId, result); - // Redis 정리 + // 처리 완료된 청크 삭제 (중복 처리 방지) audioBufferService.clearProcessedChunks(meetingId); log.info("회의 처리 완료 - meetingId: {}, text: {}", meetingId, result.getText()); @@ -123,6 +137,7 @@ public class AudioBatchProcessor { UUID.randomUUID().toString(), // segmentId meetingId, // recordingId meetingId, // meetingId + meetingId, // sessionId (meetingId와 동일) result.getText(), // text "UNKNOWN", // speakerId "참석자", // speakerName diff --git a/stt/src/main/java/com/unicorn/hgzero/stt/service/AzureSpeechService.java b/stt/src/main/java/com/unicorn/hgzero/stt/service/AzureSpeechService.java index 9ec54e4..7b9aa49 100644 --- a/stt/src/main/java/com/unicorn/hgzero/stt/service/AzureSpeechService.java +++ b/stt/src/main/java/com/unicorn/hgzero/stt/service/AzureSpeechService.java @@ -4,6 +4,7 @@ import com.microsoft.cognitiveservices.speech.*; import com.microsoft.cognitiveservices.speech.audio.AudioConfig; import com.microsoft.cognitiveservices.speech.audio.AudioInputStream; import com.microsoft.cognitiveservices.speech.audio.PushAudioInputStream; +import com.unicorn.hgzero.stt.util.AudioConverter; import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; import lombok.extern.slf4j.Slf4j; @@ -43,9 +44,15 @@ public class AzureSpeechService { speechConfig = SpeechConfig.fromSubscription(subscriptionKey, region); speechConfig.setSpeechRecognitionLanguage(language); - // 연속 인식 설정 최적화 - speechConfig.setProperty(PropertyId.SpeechServiceConnection_EndSilenceTimeoutMs, "3000"); - speechConfig.setProperty(PropertyId.SpeechServiceConnection_InitialSilenceTimeoutMs, "10000"); + // 연속 인식 설정 최적화 - 회의록에 적합하게 조정 + speechConfig.setProperty(PropertyId.SpeechServiceConnection_EndSilenceTimeoutMs, "5000"); // 5초로 증가 + speechConfig.setProperty(PropertyId.SpeechServiceConnection_InitialSilenceTimeoutMs, "15000"); // 15초로 증가 + + // 중간 결과 활성화 (연속 인식 시 유용) + speechConfig.setProperty(PropertyId.SpeechServiceResponse_RequestDetailedResultTrueFalse, "true"); + + // 음성 인식 품질 향상 + speechConfig.setProperty(PropertyId.SpeechServiceConnection_RecoLanguage, language); log.info("Azure Speech Service 초기화 완료 - Region: {}, Language: {}", region, language); @@ -58,7 +65,7 @@ public class AzureSpeechService { /** * 오디오 데이터를 텍스트로 변환 (배치 처리용) * - * @param audioData 병합된 오디오 데이터 (5초 분량) + * @param audioData 병합된 오디오 데이터 (15초 분량) * @return 인식 결과 */ public RecognitionResult recognizeAudio(byte[] audioData) { @@ -67,10 +74,69 @@ public class AzureSpeechService { return createSimulationResult(); } + // 오디오 데이터 품질 검증 + if (!AudioConverter.isValidAudioData(audioData)) { + log.warn("유효하지 않은 오디오 데이터 - 인식 건너뜀"); + return new RecognitionResult("", 0.0, false); + } + + // 오디오 통계 로깅 (디버깅용) + AudioConverter.AudioStats stats = AudioConverter.calculateStats(audioData); + log.debug("오디오 통계: {}", stats); + + // 재시도 로직 (최대 3회) + int maxRetries = 3; + int retryDelay = 1000; // 1초 + + for (int attempt = 1; attempt <= maxRetries; attempt++) { + try { + RecognitionResult result = recognizeAudioInternal(audioData); + + if (result.isSuccess()) { + log.info("음성 인식 성공 (시도 {}/{})", attempt, maxRetries); + return result; + } + + // NoMatch 결과일 경우 재시도 + if (attempt < maxRetries) { + log.warn("음성 인식 실패 (NoMatch) - 재시도 {}/{}", attempt, maxRetries); + Thread.sleep(retryDelay); + retryDelay *= 2; // 지수 백오프 + } + + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + log.error("재시도 중단됨", e); + break; + } catch (Exception e) { + log.error("음성 인식 실패 (시도 {}/{})", attempt, maxRetries, e); + if (attempt < maxRetries) { + try { + Thread.sleep(retryDelay); + retryDelay *= 2; + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + break; + } + } + } + } + + log.warn("음성 인식 최종 실패 - 최대 재시도 횟수 초과"); + return new RecognitionResult("", 0.0, false); + } + + /** + * 실제 음성 인식 수행 (내부 메서드) + */ + private RecognitionResult recognizeAudioInternal(byte[] audioData) throws Exception { PushAudioInputStream pushStream = null; SpeechRecognizer recognizer = null; try { + // WAV 형식으로 변환 + byte[] wavData = AudioConverter.convertToWav(audioData); + // Push 오디오 스트림 생성 pushStream = AudioInputStream.createPushStream(); AudioConfig audioConfig = AudioConfig.fromStreamInput(pushStream); @@ -79,7 +145,7 @@ public class AzureSpeechService { recognizer = new SpeechRecognizer(speechConfig, audioConfig); // 오디오 데이터 전송 - pushStream.write(audioData); + pushStream.write(wavData); pushStream.close(); // 인식 실행 (동기 방식) @@ -88,10 +154,6 @@ public class AzureSpeechService { // 결과 처리 return processRecognitionResult(result); - } catch (Exception e) { - log.error("음성 인식 실패", e); - return new RecognitionResult("", 0.0, false); - } finally { // 리소스 정리 if (recognizer != null) { @@ -106,19 +168,25 @@ public class AzureSpeechService { private RecognitionResult processRecognitionResult(SpeechRecognitionResult result) { if (result.getReason() == ResultReason.RecognizedSpeech) { String text = result.getText(); - double confidence = calculateConfidence(text); - log.info("음성 인식 성공: {}, 신뢰도: {:.2f}", text, confidence); + // Azure Speech SDK의 실제 신뢰도 사용 (있는 경우) + // Note: Java SDK는 confidence를 직접 제공하지 않으므로 추정치 사용 + double confidence = calculateConfidence(text, result); + + log.info("음성 인식 성공: {}, 신뢰도: {}", text, confidence); return new RecognitionResult(text, confidence, true); } else if (result.getReason() == ResultReason.NoMatch) { - log.debug("음성 인식 실패 - NoMatch (무음 또는 인식 불가)"); + NoMatchDetails noMatch = NoMatchDetails.fromResult(result); + log.debug("음성 인식 실패 - NoMatch, Reason: {}", noMatch.getReason()); return new RecognitionResult("", 0.0, false); } else if (result.getReason() == ResultReason.Canceled) { CancellationDetails cancellation = CancellationDetails.fromResult(result); - log.error("음성 인식 취소 - Reason: {}, Details: {}", - cancellation.getReason(), cancellation.getErrorDetails()); + log.error("음성 인식 취소 - Reason: {}, ErrorCode: {}, Details: {}", + cancellation.getReason(), + cancellation.getErrorCode(), + cancellation.getErrorDetails()); return new RecognitionResult("", 0.0, false); } @@ -126,20 +194,45 @@ public class AzureSpeechService { } /** - * 신뢰도 계산 (추정) - * Azure Speech는 confidence를 직접 제공하지 않으므로 텍스트 길이 기반 추정 + * 신뢰도 계산 (개선된 추정 알고리즘) + * Azure Speech Java SDK는 confidence를 직접 제공하지 않으므로 여러 지표 기반 추정 */ - private double calculateConfidence(String text) { + private double calculateConfidence(String text, SpeechRecognitionResult result) { if (text == null || text.trim().isEmpty()) { return 0.0; } - // 텍스트 길이 기반 휴리스틱 + double confidence = 0.7; // 기본값 + + // 1. 텍스트 길이 기반 (더 긴 텍스트 = 높은 신뢰도) int length = text.length(); - if (length > 50) return 0.95; - if (length > 20) return 0.85; - if (length > 10) return 0.75; - return 0.65; + if (length > 50) { + confidence += 0.15; + } else if (length > 20) { + confidence += 0.10; + } else if (length > 10) { + confidence += 0.05; + } + + // 2. 단어 수 기반 (더 많은 단어 = 높은 신뢰도) + String[] words = text.trim().split("\\s+"); + if (words.length > 10) { + confidence += 0.10; + } else if (words.length > 5) { + confidence += 0.05; + } + + // 3. 특수문자 비율 (낮을수록 높은 신뢰도) + long specialCharCount = text.chars() + .filter(c -> !Character.isLetterOrDigit(c) && !Character.isWhitespace(c)) + .count(); + double specialCharRatio = (double) specialCharCount / length; + if (specialCharRatio < 0.05) { + confidence += 0.05; + } + + // 최대값 제한 + return Math.min(confidence, 0.98); } /** diff --git a/stt/src/main/java/com/unicorn/hgzero/stt/service/InMemoryAudioBufferService.java b/stt/src/main/java/com/unicorn/hgzero/stt/service/InMemoryAudioBufferService.java new file mode 100644 index 0000000..fd81cf0 --- /dev/null +++ b/stt/src/main/java/com/unicorn/hgzero/stt/service/InMemoryAudioBufferService.java @@ -0,0 +1,165 @@ +package com.unicorn.hgzero.stt.service; + +import com.unicorn.hgzero.stt.dto.AudioChunkDto; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + +/** + * 인메모리 오디오 버퍼 서비스 (Redis 대체) + * + * 7초 배치 처리를 위한 임시 저장소 + * - 빠른 속도: 네트워크 없음, 메모리 직접 접근 + * - 타임아웃 없음: Azure Redis 타임아웃 문제 해결 + * - 간단함: Redis 설정 불필요 + * + * Note: 서버 재시작 시 데이터 손실 가능 (7초 분량만 손실되므로 MVP에서는 허용) + */ +@Slf4j +@Service +public class InMemoryAudioBufferService { + + // 회의 ID별 오디오 청크 저장소 + private final Map> audioChunksMap = new ConcurrentHashMap<>(); + + // 활성 회의 목록 + private final Set activeMeetings = ConcurrentHashMap.newKeySet(); + + /** + * 오디오 청크 버퍼링 (인메모리 저장) + */ + public void bufferAudioChunk(AudioChunkDto chunk) { + try { + String meetingId = chunk.getMeetingId(); + + // 회의별 청크 리스트 가져오기 (없으면 생성) + List chunks = audioChunksMap.computeIfAbsent( + meetingId, + k -> Collections.synchronizedList(new ArrayList<>()) + ); + + // 청크 추가 + chunks.add(chunk); + + // 활성 회의 목록에 추가 + activeMeetings.add(meetingId); + + log.debug("오디오 청크 버퍼링 완료 (인메모리) - meetingId: {}, chunkIndex: {}, 총: {}개", + meetingId, chunk.getChunkIndex(), chunks.size()); + + } catch (Exception e) { + log.error("오디오 청크 버퍼링 실패 - meetingId: {}", chunk.getMeetingId(), e); + } + } + + /** + * 활성 회의 목록 조회 + */ + public Set getActiveMeetings() { + return new HashSet<>(activeMeetings); + } + + /** + * 회의의 모든 오디오 청크 조회 (배치 처리용) + */ + public List getAudioChunks(String meetingId) { + List chunks = audioChunksMap.get(meetingId); + + if (chunks == null || chunks.isEmpty()) { + return Collections.emptyList(); + } + + // 복사본 반환 (thread-safe) + synchronized (chunks) { + return new ArrayList<>(chunks); + } + } + + /** + * 처리 완료된 청크 삭제 + */ + public void clearProcessedChunks(String meetingId) { + try { + List chunks = audioChunksMap.get(meetingId); + + if (chunks != null) { + synchronized (chunks) { + int removedCount = chunks.size(); + chunks.clear(); + log.debug("오디오 청크 삭제 완료 - meetingId: {}, 삭제된 청크: {}개", + meetingId, removedCount); + } + } + + } catch (Exception e) { + log.error("오디오 청크 삭제 실패 - meetingId: {}", meetingId, e); + } + } + + /** + * 오디오 청크 병합 (7초 분량) + */ + public byte[] mergeAudioChunks(List chunks) { + if (chunks == null || chunks.isEmpty()) { + return new byte[0]; + } + + try { + // 청크 인덱스 순서로 정렬 + List sortedChunks = chunks.stream() + .sorted(Comparator.comparing(AudioChunkDto::getChunkIndex)) + .collect(Collectors.toList()); + + // 전체 크기 계산 + int totalSize = sortedChunks.stream() + .mapToInt(chunk -> chunk.getAudioData().length) + .sum(); + + // 병합 + byte[] mergedAudio = new byte[totalSize]; + int position = 0; + + for (AudioChunkDto chunk : sortedChunks) { + byte[] chunkData = chunk.getAudioData(); + System.arraycopy(chunkData, 0, mergedAudio, position, chunkData.length); + position += chunkData.length; + } + + log.debug("오디오 청크 병합 완료 - 청크 수: {}, 총 크기: {} bytes", + sortedChunks.size(), totalSize); + + return mergedAudio; + + } catch (Exception e) { + log.error("오디오 청크 병합 실패", e); + return new byte[0]; + } + } + + /** + * 회의 종료 시 데이터 정리 + */ + public void cleanupMeeting(String meetingId) { + audioChunksMap.remove(meetingId); + activeMeetings.remove(meetingId); + log.info("회의 데이터 정리 완료 (인메모리) - meetingId: {}", meetingId); + } + + /** + * 전체 통계 조회 (모니터링용) + */ + public Map getStatistics() { + int totalChunks = audioChunksMap.values().stream() + .mapToInt(List::size) + .sum(); + + return Map.of( + "activeMeetings", activeMeetings.size(), + "totalChunks", totalChunks, + "meetingsWithData", audioChunksMap.size() + ); + } +} diff --git a/stt/src/main/java/com/unicorn/hgzero/stt/service/TranscriptionServiceImpl.java b/stt/src/main/java/com/unicorn/hgzero/stt/service/TranscriptionServiceImpl.java index 65648d2..1bbefb9 100644 --- a/stt/src/main/java/com/unicorn/hgzero/stt/service/TranscriptionServiceImpl.java +++ b/stt/src/main/java/com/unicorn/hgzero/stt/service/TranscriptionServiceImpl.java @@ -85,6 +85,7 @@ public class TranscriptionServiceImpl implements TranscriptionService { ); TranscriptionEvent.SegmentCreated event = TranscriptionEvent.SegmentCreated.of( segmentId, request.getRecordingId(), recording.getMeetingId(), + recording.getMeetingId(), // sessionId (meetingId와 동일) recognizedText, speakerId, "화자-" + speakerId.substring(4), timestampAsDateTime, 3.5, confidence, warningFlag ); diff --git a/stt/src/main/java/com/unicorn/hgzero/stt/util/AudioConverter.java b/stt/src/main/java/com/unicorn/hgzero/stt/util/AudioConverter.java new file mode 100644 index 0000000..f474a72 --- /dev/null +++ b/stt/src/main/java/com/unicorn/hgzero/stt/util/AudioConverter.java @@ -0,0 +1,204 @@ +package com.unicorn.hgzero.stt.util; + +import lombok.extern.slf4j.Slf4j; + +import javax.sound.sampled.*; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +/** + * 오디오 형식 변환 유틸리티 + * WebM → WAV(PCM 16bit 16kHz) 변환 + */ +@Slf4j +public class AudioConverter { + + private static final int TARGET_SAMPLE_RATE = 16000; + private static final int TARGET_SAMPLE_SIZE_IN_BITS = 16; + private static final int TARGET_CHANNELS = 1; // Mono + private static final boolean TARGET_SIGNED = true; + private static final boolean TARGET_BIG_ENDIAN = false; + + /** + * WebM/기타 형식을 WAV(PCM 16bit 16kHz mono)로 변환 + * + * @param audioData 원본 오디오 데이터 + * @return WAV 형식 오디오 데이터 + */ + public static byte[] convertToWav(byte[] audioData) { + if (audioData == null || audioData.length == 0) { + log.warn("변환할 오디오 데이터 없음"); + return new byte[0]; + } + + try { + // WebM은 JavaSound API가 직접 지원하지 않으므로 + // 이미 PCM 데이터라고 가정하고 WAV 헤더만 추가 + // (실제 WebM 디코딩은 FFmpeg 필요) + + // 최소 데이터 크기 검증 (1초 = 16000 samples * 2 bytes = 32KB) + if (audioData.length < 16000) { + log.warn("오디오 데이터가 너무 작음 ({}bytes) - 최소 16KB 필요", audioData.length); + } + + // WAV 헤더 생성 및 데이터 결합 + byte[] wavData = addWavHeader(audioData); + + log.debug("오디오 형식 변환 완료 - 원본: {}bytes → WAV: {}bytes", + audioData.length, wavData.length); + + return wavData; + + } catch (Exception e) { + log.error("오디오 형식 변환 실패", e); + return audioData; // 실패 시 원본 반환 + } + } + + /** + * PCM 데이터에 WAV 헤더 추가 + * Format: PCM 16bit 16kHz Mono + */ + private static byte[] addWavHeader(byte[] pcmData) throws IOException { + ByteArrayOutputStream wavStream = new ByteArrayOutputStream(); + + // RIFF 헤더 + wavStream.write("RIFF".getBytes()); + wavStream.write(intToByteArray(36 + pcmData.length), 0, 4); // ChunkSize + wavStream.write("WAVE".getBytes()); + + // fmt 청크 + wavStream.write("fmt ".getBytes()); + wavStream.write(intToByteArray(16), 0, 4); // Subchunk1Size (PCM = 16) + wavStream.write(shortToByteArray((short) 1), 0, 2); // AudioFormat (1 = PCM) + wavStream.write(shortToByteArray((short) TARGET_CHANNELS), 0, 2); // NumChannels + wavStream.write(intToByteArray(TARGET_SAMPLE_RATE), 0, 4); // SampleRate + + int byteRate = TARGET_SAMPLE_RATE * TARGET_CHANNELS * TARGET_SAMPLE_SIZE_IN_BITS / 8; + wavStream.write(intToByteArray(byteRate), 0, 4); // ByteRate + + int blockAlign = TARGET_CHANNELS * TARGET_SAMPLE_SIZE_IN_BITS / 8; + wavStream.write(shortToByteArray((short) blockAlign), 0, 2); // BlockAlign + wavStream.write(shortToByteArray((short) TARGET_SAMPLE_SIZE_IN_BITS), 0, 2); // BitsPerSample + + // data 청크 + wavStream.write("data".getBytes()); + wavStream.write(intToByteArray(pcmData.length), 0, 4); // Subchunk2Size + wavStream.write(pcmData); + + return wavStream.toByteArray(); + } + + /** + * int를 little-endian byte array로 변환 + */ + private static byte[] intToByteArray(int value) { + return new byte[] { + (byte) (value & 0xff), + (byte) ((value >> 8) & 0xff), + (byte) ((value >> 16) & 0xff), + (byte) ((value >> 24) & 0xff) + }; + } + + /** + * short를 little-endian byte array로 변환 + */ + private static byte[] shortToByteArray(short value) { + return new byte[] { + (byte) (value & 0xff), + (byte) ((value >> 8) & 0xff) + }; + } + + /** + * 오디오 품질 검증 + * + * @param audioData 검증할 오디오 데이터 + * @return 최소 품질 기준 충족 여부 + */ + public static boolean isValidAudioData(byte[] audioData) { + if (audioData == null || audioData.length == 0) { + log.warn("오디오 데이터 없음"); + return false; + } + + // 최소 크기: 0.5초 = 16000 samples/sec * 0.5 sec * 2 bytes = 16KB + int minSize = TARGET_SAMPLE_RATE * TARGET_SAMPLE_SIZE_IN_BITS / 8 / 2; + + if (audioData.length < minSize) { + log.warn("오디오 데이터가 너무 작음 - size: {}bytes, 최소: {}bytes", + audioData.length, minSize); + return false; + } + + // 무음 여부 검증 (모든 샘플이 0이면 무음) + boolean allZero = true; + for (byte b : audioData) { + if (b != 0) { + allZero = false; + break; + } + } + + if (allZero) { + log.warn("무음 데이터 감지"); + return false; + } + + return true; + } + + /** + * 오디오 데이터 통계 계산 (디버깅용) + */ + public static AudioStats calculateStats(byte[] audioData) { + if (audioData == null || audioData.length == 0) { + return new AudioStats(0, 0.0, 0.0, 0.0); + } + + double sum = 0; + double sumSquares = 0; + int max = 0; + + for (int i = 0; i < audioData.length - 1; i += 2) { + // 16bit PCM 샘플 읽기 (little-endian) + short sample = (short) ((audioData[i + 1] << 8) | (audioData[i] & 0xff)); + int absSample = Math.abs(sample); + + sum += absSample; + sumSquares += absSample * absSample; + max = Math.max(max, absSample); + } + + int numSamples = audioData.length / 2; + double avg = sum / numSamples; + double rms = Math.sqrt(sumSquares / numSamples); + + return new AudioStats(numSamples, avg, rms, max); + } + + /** + * 오디오 통계 정보 + */ + public static class AudioStats { + public final int numSamples; + public final double avgAmplitude; + public final double rmsAmplitude; + public final double maxAmplitude; + + public AudioStats(int numSamples, double avgAmplitude, double rmsAmplitude, double maxAmplitude) { + this.numSamples = numSamples; + this.avgAmplitude = avgAmplitude; + this.rmsAmplitude = rmsAmplitude; + this.maxAmplitude = maxAmplitude; + } + + @Override + public String toString() { + return String.format("AudioStats{samples=%d, avg=%.1f, rms=%.1f, max=%.1f}", + numSamples, avgAmplitude, rmsAmplitude, maxAmplitude); + } + } +} diff --git a/stt/src/main/resources/application.yml b/stt/src/main/resources/application.yml index 2ae8084..27d0b35 100644 --- a/stt/src/main/resources/application.yml +++ b/stt/src/main/resources/application.yml @@ -37,13 +37,15 @@ spring: host: ${REDIS_HOST:localhost} port: ${REDIS_PORT:6379} password: ${REDIS_PASSWORD:} - timeout: 2000ms + timeout: 30000ms # 30초로 증가 (Azure 원격 Redis 대응) + connect-timeout: 10000ms # 연결 타임아웃 명시 lettuce: pool: - max-active: 8 - max-idle: 8 - min-idle: 0 - max-wait: -1ms + max-active: 20 # 연결 풀 크기 증가 (8 → 20) + max-idle: 10 + min-idle: 2 # 최소 유지 연결 (0 → 2) + max-wait: 5000ms # 연결 대기 최대 시간 (-1ms → 5000ms) + shutdown-timeout: 2000ms database: ${REDIS_DATABASE:3} # Server Configuration diff --git a/tools/check-agenda-sections.sql b/tools/check-agenda-sections.sql new file mode 100644 index 0000000..01165b4 --- /dev/null +++ b/tools/check-agenda-sections.sql @@ -0,0 +1,17 @@ +-- ===================================================== +-- Check agenda_sections data for meeting-test +-- ===================================================== + +SELECT + id, + meeting_id, + agenda_number, + agenda_title, + ai_summary_short, + LENGTH(summary) as summary_length, + pending_items, + todos, + created_at +FROM agenda_sections +WHERE meeting_id = 'meeting-test' +ORDER BY agenda_number; diff --git a/tools/cleanup-test-data.sql b/tools/cleanup-test-data.sql new file mode 100644 index 0000000..4bf1acf --- /dev/null +++ b/tools/cleanup-test-data.sql @@ -0,0 +1,26 @@ +-- ===================================================== +-- Cleanup Test Data for meeting-test +-- ===================================================== + +-- 1. agenda_sections 삭제 (외래키 제약이 있을 수 있으므로 먼저) +DELETE FROM agenda_sections WHERE meeting_id = 'meeting-test'; + +-- 2. todos 삭제 +DELETE FROM todos WHERE meeting_id = 'meeting-test'; + +-- 3. meeting_analysis 관련 삭제 +DELETE FROM meeting_keywords WHERE analysis_id IN (SELECT analysis_id FROM meeting_analysis WHERE meeting_id = 'meeting-test'); +DELETE FROM meeting_analysis WHERE meeting_id = 'meeting-test'; + +-- 4. minutes_sections 삭제 +DELETE FROM minutes_sections WHERE minutes_id IN (SELECT minutes_id FROM minutes WHERE meeting_id = 'meeting-test'); + +-- 5. minutes 삭제 +DELETE FROM minutes WHERE meeting_id = 'meeting-test'; + +-- 6. 확인 +SELECT 'Cleanup completed' AS status; +SELECT COUNT(*) as remaining_minutes FROM minutes WHERE meeting_id = 'meeting-test'; +SELECT COUNT(*) as remaining_sections FROM minutes_sections WHERE minutes_id IN (SELECT minutes_id FROM minutes WHERE meeting_id = 'meeting-test'); +SELECT COUNT(*) as remaining_agenda FROM agenda_sections WHERE meeting_id = 'meeting-test'; +SELECT COUNT(*) as remaining_todos FROM todos WHERE meeting_id = 'meeting-test'; diff --git a/tools/insert-test-data-final.sql b/tools/insert-test-data-final.sql new file mode 100644 index 0000000..15e3ada --- /dev/null +++ b/tools/insert-test-data-final.sql @@ -0,0 +1,238 @@ +-- ===================================================== +-- Meeting Test Data for AI Service Testing (UPDATED with user_id) +-- ===================================================== + +-- 1. meeting-test 데이터가 있는지 확인 +SELECT * FROM meetings WHERE meeting_id = 'meeting-test'; + +-- 2. 기존 meeting-test 관련 데이터 정리 (있다면) +DELETE FROM minutes_sections WHERE minutes_id IN (SELECT minutes_id FROM minutes WHERE meeting_id = 'meeting-test'); +DELETE FROM minutes WHERE meeting_id = 'meeting-test'; + +-- 3. 참석자별 회의록(minutes) 생성 - user1 +INSERT INTO minutes ( + minutes_id, + meeting_id, + user_id, + title, + status, + version, + created_by, + created_at, + updated_at +) VALUES ( + 'minutes-test-user1', + 'meeting-test', + 'user1', + 'Q4 마케팅 전략 회의 - user1 작성', + 'DRAFT', + 1, + 'user1', + CURRENT_TIMESTAMP, + CURRENT_TIMESTAMP +); + +-- 4. user1 회의록 섹션 - MEMO +INSERT INTO minutes_sections ( + id, + section_id, + minutes_id, + type, + title, + content, + "order", + verified, + locked, + created_at, + updated_at +) VALUES +( + 'section-user1-1', + 'section-user1-1', + 'minutes-test-user1', + 'MEMO', + '회의 안건', + '1. Q4 마케팅 캠페인 기획 +2. 예산 배분 논의 +3. 실행 일정 수립 + +[주요 논의 사항] +마케팅 캠페인에 대한 논의를 진행했습니다. 소셜 미디어 광고와 인플루언서 마케팅을 결합한 통합 캠페인을 제안했으며, 예산은 총 5천만원으로 책정하는 것이 적절하다는 의견이 나왔습니다. 실행 시기는 11월 초부터 12월 말까지로 설정하기로 했습니다. + +김대리가 인플루언서 리스트 작성하기로 함, 다음주 금요일까지 완료 예정. 박과장은 캠페인 콘텐츠 기획안 초안을 이번주 내로 준비하기로 했습니다. + +[결정 사항] +1. 소셜 미디어 + 인플루언서 통합 캠페인 실행 +2. 예산: 5천만원 배정 +3. 기간: 11월 초 ~ 12월 말', + 1, + false, + false, + CURRENT_TIMESTAMP, + CURRENT_TIMESTAMP +); + + +-- 8. 참석자별 회의록(minutes) 생성 - user2 +INSERT INTO minutes ( + minutes_id, + meeting_id, + user_id, + title, + status, + version, + created_by, + created_at, + updated_at +) VALUES ( + 'minutes-test-user2', + 'meeting-test', + 'user2', + 'Q4 마케팅 전략 회의 - user2 작성', + 'DRAFT', + 1, + 'user2', + CURRENT_TIMESTAMP, + CURRENT_TIMESTAMP +); + +-- 9. user2 회의록 섹션 - MEMO +INSERT INTO minutes_sections ( + id, + section_id, + minutes_id, + type, + title, + content, + "order", + verified, + locked, + created_at, + updated_at +) VALUES +( + 'section-user2-1', + 'section-user2-1', + 'minutes-test-user2', + 'MEMO', + '회의 목표', + 'Q4 마케팅 전략 수립 및 예산 확정 + +[논의 내용] +Q4 마케팅 전략으로 디지털 마케팅 강화 방안을 논의했습니다. 특히 인스타그램과 유튜브를 활용한 인플루언서 마케팅이 효과적일 것으로 판단됩니다. 타겟 연령층은 20-30대이며, 예산은 광고비 3천만원, 인플루언서 비용 2천만원으로 분배하는 것이 좋겠다는 의견이 있었습니다. + +이대리가 경쟁사 소셜 미디어 분석 보고서를 다음 주 수요일까지 제출하기로 했고, 최주임은 광고 플랫폼 선정 및 견적 비교 자료를 월요일까지 준비합니다. + +[결정 사항] +1. 인스타그램, 유튜브 중심 인플루언서 마케팅 진행 +2. 타겟: 20-30대 +3. 예산: 광고비 3천만원, 인플루언서 2천만원', + 1, + false, + false, + CURRENT_TIMESTAMP, + CURRENT_TIMESTAMP +); + + +-- 참석자별 회의록(minutes) 생성 - user3 +INSERT INTO minutes ( + minutes_id, + meeting_id, + user_id, + title, + status, + version, + created_by, + created_at, + updated_at +) VALUES ( + 'minutes-test-user3', + 'meeting-test', + 'user3', + 'Q4 마케팅 전략 회의 - user3 작성', + 'DRAFT', + 1, + 'user3', + CURRENT_TIMESTAMP, + CURRENT_TIMESTAMP +); + +-- 14. user3 회의록 섹션 - MEMO +INSERT INTO minutes_sections ( + id, + section_id, + minutes_id, + type, + title, + content, + "order", + verified, + locked, + created_at, + updated_at +) VALUES +( + 'section-user3-1', + 'section-user3-1', + 'minutes-test-user3', + 'MEMO', + '안건', + '1. Q4 마케팅 목표 설정 +2. 채널별 예산 배분 +3. KPI 지표 정의 + +[회의 내용] +Q4 마케팅 목표는 브랜드 인지도 상승과 매출 증대로 설정. 예산 5천만원을 디지털 광고와 인플루언서 마케팅에 분배하며, 성과 측정을 위해 도달률, 참여율, 전환율을 KPI로 설정. ROI 목표는 150% + +정차장님께서 예산 집행 계획서를 이번 주 목요일까지 작성하시기로 하셨습니다. KPI 대시보드 구축은 한팀장님이 담당하시고 11월 첫째 주까지 완료 예정입니다.', + 1, + false, + false, + CURRENT_TIMESTAMP, + CURRENT_TIMESTAMP +); + + +/* +-- 16. user3 회의록 섹션 - DECISION +INSERT INTO minutes_sections ( + id, + section_id, + minutes_id, + type, + title, + content, + "order", + verified, + locked, + created_at, + updated_at +) VALUES +( + 'section-user3-3', + 'section-user3-3', + 'minutes-test-user3', + 'DECISION', + '결정 사항', + '1. 목표: 브랜드 인지도 상승 + 매출 증대\n2. 예산: 총 5천만원 (디지털 광고 + 인플루언서)\n3. KPI: 도달률, 참여율, 전환율, ROI 150% 이상', + 3, + false, + false, + CURRENT_TIMESTAMP, + CURRENT_TIMESTAMP +); + +*/ + +-- 18. 데이터 확인 +SELECT 'Minutes 데이터:' AS info; +SELECT * FROM minutes WHERE meeting_id = 'meeting-test'; + +SELECT 'Minutes Sections 데이터:' AS info; +SELECT ms.section_id, ms.minutes_id, m.created_by, m.user_id, ms.type, ms.title, + LENGTH(ms.content) as content_length, ms."order" +FROM minutes_sections ms +JOIN minutes m ON ms.minutes_id = m.minutes_id +WHERE m.meeting_id = 'meeting-test' +ORDER BY m.created_by, ms."order"; \ No newline at end of file