From ad7975efbd74e5143d0d946afa2b4b5b62bea99a Mon Sep 17 00:00:00 2001 From: djeon Date: Wed, 29 Oct 2025 15:29:40 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20rag=20=EC=84=9C=EB=B9=84=EC=8A=A4?= =?UTF-8?q?=20Event=20Hub=20=EC=97=B0=EB=8F=99=20=EB=B0=8F=20=EC=97=B0?= =?UTF-8?q?=EA=B4=80=20=ED=9A=8C=EC=9D=98=EB=A1=9D=20API=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rag/check_active_consumers.py | 191 +++++++ rag/config.yaml | 15 +- rag/docs/api-related-minutes.md | 291 +++++++++++ rag/docs/basic_tier_workaround.md | 356 +++++++++++++ rag/docs/check_consumers_guide.md | 367 +++++++++++++ rag/docs/consumer_group_setup.md | 494 ++++++++++++++++++ rag/eventhub_guide.md | 378 ++++++++++++++ rag/src/api/__pycache__/main.cpython-311.pyc | Bin 19353 -> 25544 bytes rag/src/api/main.py | 139 ++++- .../rag_minutes_db.cpython-311.pyc | Bin 17827 -> 18297 bytes rag/src/db/rag_minutes_db.py | 30 +- .../__pycache__/minutes.cpython-311.pyc | Bin 6374 -> 8269 bytes rag/src/models/minutes.py | 38 ++ .../eventhub_consumer.cpython-311.pyc | Bin 15943 -> 21390 bytes rag/src/services/eventhub_consumer.py | 137 ++++- .../__pycache__/redis_cache.cpython-311.pyc | Bin 0 -> 8529 bytes rag/src/utils/redis_cache.py | 206 ++++++++ rag/start_all.sh | 47 ++ rag/start_all_services.py | 180 +++++++ rag/start_consumer.py | 8 +- 20 files changed, 2855 insertions(+), 22 deletions(-) create mode 100644 rag/check_active_consumers.py create mode 100644 rag/docs/api-related-minutes.md create mode 100644 rag/docs/basic_tier_workaround.md create mode 100644 rag/docs/check_consumers_guide.md create mode 100644 rag/docs/consumer_group_setup.md create mode 100644 rag/eventhub_guide.md create mode 100644 rag/src/utils/__pycache__/redis_cache.cpython-311.pyc create mode 100644 rag/src/utils/redis_cache.py create mode 100644 rag/start_all.sh create mode 100644 rag/start_all_services.py diff --git a/rag/check_active_consumers.py b/rag/check_active_consumers.py new file mode 100644 index 0000000..e38ba26 --- /dev/null +++ b/rag/check_active_consumers.py @@ -0,0 +1,191 @@ +""" +Event Hub의 활성 Consumer(host) 조회 스크립트 + +Blob Storage의 ownership 정보를 통해 현재 어떤 Consumer가 +어떤 파티션을 읽고 있는지 확인합니다. +""" +import asyncio +import json +from datetime import datetime, timezone +from pathlib import Path +from azure.storage.blob import BlobServiceClient +from src.utils.config import load_config + + +async def check_active_consumers(): + """활성 Consumer 조회""" + + # 설정 로드 + config_path = Path(__file__).parent / "config.yaml" + config = load_config(str(config_path)) + + eventhub_config = config['eventhub'] + storage_conn_str = eventhub_config['storage']['connection_string'] + container_name = eventhub_config['storage']['container_name'] + consumer_group = eventhub_config['consumer_group'] + + print("=" * 80) + print("📊 Event Hub Active Consumers") + print("=" * 80) + print(f"Consumer Group: {consumer_group}") + print(f"Container: {container_name}") + print() + + # Blob Service Client 생성 + blob_service = BlobServiceClient.from_connection_string(storage_conn_str) + container_client = blob_service.get_container_client(container_name) + + # Ownership blob 조회 (파티션 소유권 정보) + ownership_prefix = f"{consumer_group}/ownership/" + checkpoint_prefix = f"{consumer_group}/checkpoint/" + + print("-" * 80) + print("🔍 Ownership 정보 (현재 파티션을 읽고 있는 Consumer)") + print("-" * 80) + + ownership_blobs = container_client.list_blobs(name_starts_with=ownership_prefix) + active_consumers = {} + partition_owners = {} + + for blob in ownership_blobs: + # Blob 내용 읽기 + blob_client = container_client.get_blob_client(blob.name) + content = blob_client.download_blob().readall() + + try: + ownership_data = json.loads(content) + + partition_id = blob.name.split('/')[-1] + owner_id = ownership_data.get('ownerIdentifier', 'unknown') + last_modified = blob.last_modified + + # 현재 시간과 비교하여 활성 상태 확인 (30초 이내 갱신되었으면 활성) + now = datetime.now(timezone.utc) + time_diff = (now - last_modified).total_seconds() + is_active = time_diff < 60 # 60초 이내면 활성으로 간주 + + partition_owners[partition_id] = { + 'owner_id': owner_id, + 'last_modified': last_modified, + 'is_active': is_active, + 'time_diff': time_diff + } + + # Consumer별 집계 + if owner_id not in active_consumers: + active_consumers[owner_id] = { + 'partitions': [], + 'last_seen': last_modified, + 'is_active': is_active + } + + active_consumers[owner_id]['partitions'].append(partition_id) + + # 가장 최근 시간으로 업데이트 + if last_modified > active_consumers[owner_id]['last_seen']: + active_consumers[owner_id]['last_seen'] = last_modified + active_consumers[owner_id]['is_active'] = is_active + + except json.JSONDecodeError: + print(f"⚠️ 파티션 {partition_id}: 파싱 실패") + continue + + # 파티션별 출력 + if partition_owners: + print() + for partition_id, info in sorted(partition_owners.items()): + status = "🟢 ACTIVE" if info['is_active'] else "🔴 INACTIVE" + print(f"파티션 {partition_id}:") + print(f" 상태: {status}") + print(f" Owner ID: {info['owner_id'][:40]}...") + print(f" 마지막 갱신: {info['last_modified'].strftime('%Y-%m-%d %H:%M:%S')} UTC") + print(f" 경과 시간: {int(info['time_diff'])}초 전") + print() + else: + print("⚠️ 소유권 정보가 없습니다. Consumer가 실행되지 않았을 수 있습니다.") + print() + + # Consumer별 요약 + print("-" * 80) + print("📋 Consumer 요약") + print("-" * 80) + + if active_consumers: + for idx, (owner_id, info) in enumerate(active_consumers.items(), 1): + status = "🟢 ACTIVE" if info['is_active'] else "🔴 INACTIVE" + print(f"\nConsumer #{idx} {status}") + print(f" Owner ID: {owner_id}") + print(f" 소유 파티션: {', '.join(info['partitions'])}") + print(f" 파티션 개수: {len(info['partitions'])}") + print(f" 마지막 활동: {info['last_seen'].strftime('%Y-%m-%d %H:%M:%S')} UTC") + else: + print("\n활성 Consumer가 없습니다.") + + # Checkpoint 정보 조회 + print() + print("-" * 80) + print("📍 Checkpoint 정보 (마지막 읽은 위치)") + print("-" * 80) + + checkpoint_blobs = container_client.list_blobs(name_starts_with=checkpoint_prefix) + + for blob in checkpoint_blobs: + blob_client = container_client.get_blob_client(blob.name) + content = blob_client.download_blob().readall() + + try: + checkpoint_data = json.loads(content) + + partition_id = blob.name.split('/')[-1] + offset = checkpoint_data.get('offset', 'N/A') + sequence_number = checkpoint_data.get('sequenceNumber', 'N/A') + + print(f"\n파티션 {partition_id}:") + print(f" Offset: {offset}") + print(f" Sequence Number: {sequence_number}") + + except json.JSONDecodeError: + continue + + print() + print("=" * 80) + + # 모든 Consumer Group 조회 + print() + print("-" * 80) + print("📂 모든 Consumer Groups") + print("-" * 80) + + all_blobs = container_client.list_blobs() + consumer_groups = set() + + for blob in all_blobs: + # Consumer Group 이름은 첫 번째 경로 세그먼트 + parts = blob.name.split('/') + if len(parts) > 0: + consumer_groups.add(parts[0]) + + if consumer_groups: + print() + for cg in sorted(consumer_groups): + current = " ⬅️ 현재" if cg == consumer_group else "" + print(f" - {cg}{current}") + else: + print("\nConsumer Group 정보가 없습니다.") + + print() + print("=" * 80) + + +def main(): + """메인 함수""" + try: + asyncio.run(check_active_consumers()) + except Exception as e: + print(f"❌ 에러 발생: {str(e)}") + import traceback + traceback.print_exc() + + +if __name__ == "__main__": + main() diff --git a/rag/config.yaml b/rag/config.yaml index bf8ffe7..449119f 100644 --- a/rag/config.yaml +++ b/rag/config.yaml @@ -51,7 +51,7 @@ eventhub: # Application Settings app: - name: "Vector DB Service" + name: "RAG Service" version: "1.0.0" debug: true log_level: INFO @@ -84,6 +84,19 @@ related_documents: ttl: 3600 # 1시간 prefix: "doc:" +# RAG 회의록 설정 +rag_minutes: + # 검색 설정 + search: + top_k: 5 + similarity_threshold: 0.7 + + # 캐싱 설정 (full_content 조회 결과 캐싱) + cache: + ttl: 1800 # 30분 (회의록은 변경이 적으므로 짧게 설정) + prefix: "minutes:" + related_ttl: 3600 # 연관 회의록 검색 결과는 1시간 + # 데이터 로딩 data: terms_dir: design/aidata diff --git a/rag/docs/api-related-minutes.md b/rag/docs/api-related-minutes.md new file mode 100644 index 0000000..3f97195 --- /dev/null +++ b/rag/docs/api-related-minutes.md @@ -0,0 +1,291 @@ +# 연관 회의록 조회 API 구현 문서 + +## 📋 개요 + +**준호** (Backend Developer) + +회의록 ID를 기준으로 유사한 연관 회의록을 조회하는 API를 구현했습니다. + +## 🎯 구현 방식: Option A (DB 조회 후 벡터 검색) + +### 선택 이유 +- ✅ **정확도 우선**: full_content 기반 검색으로 높은 정확도 보장 +- ✅ **확장성**: 향후 full_content 기반 추가 기능 확장 용이 +- ✅ **성능 최적화**: Redis 캐싱으로 DB 조회 오버헤드 최소화 + +### 처리 흐름 + +``` +1. 요청 수신 + ↓ +2. Redis 캐시 조회 (연관 회의록 결과) + ├─ HIT → 즉시 반환 + └─ MISS → 3단계로 진행 + ↓ +3. Redis 캐시 조회 (회의록 full_content) + ├─ HIT → 5단계로 진행 + └─ MISS → 4단계로 진행 + ↓ +4. DB 조회 (rag_minutes 테이블) + ├─ full_content 획득 + └─ Redis에 캐싱 (TTL: 30분) + ↓ +5. 벡터 임베딩 생성 (Azure OpenAI) + ↓ +6. 벡터 유사도 검색 (자기 자신 제외) + ↓ +7. 결과 Redis 캐싱 (TTL: 1시간) + ↓ +8. 응답 반환 +``` + +## 🔧 구현 상세 + +### 1. 데이터 모델 추가 + +**파일**: `rag/src/models/minutes.py` + +```python +class RelatedMinutesRequest(BaseModel): + """연관 회의록 조회 요청""" + minute_id: str # 기준 회의록 ID + meeting_title: str # 회의 제목 (현재 미사용) + summary: str # 회의록 요약 (현재 미사용) + top_k: int = 5 # 반환할 최대 결과 수 + similarity_threshold: float = 0.7 # 최소 유사도 임계값 + +class RelatedMinutesResponse(BaseModel): + """연관 회의록 조회 응답""" + minutes: RagMinutes # 회의록 정보 + similarity_score: float # 유사도 점수 (0.0 ~ 1.0) +``` + +### 2. DB 쿼리 함수 개선 + +**파일**: `rag/src/db/rag_minutes_db.py` + +**수정 내용**: `search_by_vector()` 함수에 `exclude_minutes_id` 파라미터 추가 + +```python +def search_by_vector( + self, + query_embedding: List[float], + top_k: int = 5, + similarity_threshold: float = 0.7, + exclude_minutes_id: Optional[str] = None # 자기 자신 제외 +) -> List[Dict[str, Any]]: + """벡터 유사도 검색""" + # WHERE 절에 minutes_id != %s 조건 추가 + # 자기 자신을 결과에서 제외 +``` + +### 3. Redis 캐싱 유틸리티 구현 + +**파일**: `rag/src/utils/redis_cache.py` + +**주요 기능**: +- `get(key)`: 캐시 조회 +- `set(key, value, ttl)`: 캐시 저장 +- `delete(key)`: 캐시 삭제 +- `delete_pattern(pattern)`: 패턴 매칭 일괄 삭제 + +**특징**: +- Redis 연결 실패 시 자동으로 캐싱 비활성화 (서비스 장애 방지) +- JSON 직렬화/역직렬화 자동 처리 + +### 4. 설정 추가 + +**파일**: `rag/config.yaml` + +```yaml +rag_minutes: + search: + top_k: 5 + similarity_threshold: 0.7 + cache: + ttl: 1800 # 회의록 조회 결과: 30분 + prefix: "minutes:" + related_ttl: 3600 # 연관 회의록 검색 결과: 1시간 +``` + +### 5. API 엔드포인트 구현 + +**파일**: `rag/src/api/main.py` + +**엔드포인트**: `POST /api/minutes/related` + +**Request Body**: +```json +{ + "minute_id": "MIN-2025-001", + "meeting_title": "2025 Q1 마케팅 전략 회의", + "summary": "2025년 1분기 마케팅 전략 수립을 위한 회의", + "top_k": 5, + "similarity_threshold": 0.7 +} +``` + +**Response**: +```json +[ + { + "minutes": { + "meeting_id": "MTG-2024-050", + "title": "2024 Q4 마케팅 성과 분석", + "minutes_id": "MIN-2024-050", + "full_content": "...", + ... + }, + "similarity_score": 0.85 + }, + ... +] +``` + +## ⚡ 성능 최적화 + +### 2단계 캐싱 전략 + +1. **회의록 조회 결과 캐싱** (TTL: 30분) + - 키: `minutes:{minute_id}` + - DB 조회 횟수 감소 + +2. **연관 회의록 검색 결과 캐싱** (TTL: 1시간) + - 키: `minutes:related:{minute_id}:{top_k}:{threshold}` + - 벡터 검색 및 임베딩 생성 비용 절감 + +### 예상 성능 개선 + +| 케이스 | 처리 시간 | 비고 | +|--------|----------|------| +| 캐시 MISS (최초 요청) | ~2-3초 | DB 조회 + 임베딩 생성 + 벡터 검색 | +| 회의록 캐시 HIT | ~1-2초 | 임베딩 생성 + 벡터 검색 | +| 연관 회의록 캐시 HIT | ~50ms | 캐시에서 즉시 반환 | + +## 🔍 사용 예시 + +### Python (requests) + +```python +import requests + +url = "http://localhost:8000/api/minutes/related" +data = { + "minute_id": "MIN-2025-001", + "meeting_title": "2025 Q1 마케팅 전략 회의", + "summary": "2025년 1분기 마케팅 전략 수립", + "top_k": 5, + "similarity_threshold": 0.7 +} + +response = requests.post(url, json=data) +related_minutes = response.json() + +for item in related_minutes: + print(f"제목: {item['minutes']['title']}") + print(f"유사도: {item['similarity_score']:.2f}") + print("---") +``` + +### curl + +```bash +curl -X POST "http://localhost:8000/api/minutes/related" \ + -H "Content-Type: application/json" \ + -d '{ + "minute_id": "MIN-2025-001", + "meeting_title": "2025 Q1 마케팅 전략 회의", + "summary": "2025년 1분기 마케팅 전략 수립", + "top_k": 5, + "similarity_threshold": 0.7 + }' +``` + +## 🧪 테스트 시나리오 + +### 1. 정상 케이스 +- ✅ 존재하는 minute_id로 요청 +- ✅ 유사한 회의록 5개 반환 +- ✅ 자기 자신은 결과에서 제외 + +### 2. 캐싱 동작 확인 +- ✅ 최초 요청: 캐시 MISS → DB 조회 +- ✅ 2번째 요청: 캐시 HIT → 즉시 반환 +- ✅ TTL 경과 후: 캐시 MISS → 재조회 + +### 3. 에러 케이스 +- ❌ 존재하지 않는 minute_id → 404 오류 +- ❌ 잘못된 요청 형식 → 422 오류 + +## 📊 데이터베이스 영향 + +### 쿼리 패턴 + +```sql +-- 1. 회의록 조회 (캐시 MISS 시) +SELECT * FROM rag_minutes WHERE minutes_id = 'MIN-2025-001'; + +-- 2. 벡터 유사도 검색 (캐시 MISS 시) +SELECT *, + 1 - (embedding <=> '{vector}'::vector) as similarity_score +FROM rag_minutes +WHERE embedding IS NOT NULL + AND 1 - (embedding <=> '{vector}'::vector) >= 0.7 + AND minutes_id != 'MIN-2025-001' -- 자기 자신 제외 +ORDER BY embedding <=> '{vector}'::vector +LIMIT 5; +``` + +### 인덱스 활용 + +- `minutes_id`: Primary Key 인덱스 활용 +- `embedding`: pgvector 인덱스 활용 (IVFFlat 또는 HNSW) + +## 🔐 보안 고려사항 + +1. **SQL Injection 방지**: psycopg2 파라미터 바인딩 사용 +2. **Rate Limiting**: 향후 추가 권장 (분당 요청 수 제한) +3. **인증/인가**: 향후 JWT 토큰 기반 인증 추가 권장 + +## 🚀 향후 개선 사항 + +### 1. Hybrid 검색 지원 (Option B 통합) +- summary를 활용한 빠른 1차 검색 +- full_content로 정밀한 2차 검색 +- 적응형 임계값 조정 + +### 2. 성능 모니터링 +- 캐시 히트율 추적 +- API 응답 시간 측정 +- 벡터 검색 성능 분석 + +### 3. 검색 품질 개선 +- 시간 가중치 적용 (최근 회의록 우선) +- 부서/팀별 필터링 옵션 +- 주제별 카테고리 분류 + +## 📝 파일 변경 목록 + +| 파일 | 변경 유형 | 설명 | +|------|----------|------| +| `rag/src/models/minutes.py` | 수정 | Request/Response 모델 추가 | +| `rag/src/db/rag_minutes_db.py` | 수정 | exclude_minutes_id 파라미터 추가 | +| `rag/src/utils/redis_cache.py` | 신규 | Redis 캐싱 유틸리티 | +| `rag/src/api/main.py` | 수정 | API 엔드포인트 추가 | +| `rag/config.yaml` | 수정 | rag_minutes 설정 추가 | + +## ✅ 구현 완료 체크리스트 + +- [x] Request/Response 모델 정의 +- [x] DB 쿼리 함수 개선 (자기 자신 제외) +- [x] Redis 캐싱 유틸리티 구현 +- [x] API 엔드포인트 구현 +- [x] 2단계 캐싱 전략 적용 +- [x] 설정 파일 업데이트 +- [x] 문서 작성 + +--- + +**작성자**: 준호 (Backend Developer) +**작성일**: 2025-10-29 +**버전**: 1.0.0 diff --git a/rag/docs/basic_tier_workaround.md b/rag/docs/basic_tier_workaround.md new file mode 100644 index 0000000..2f2c6a6 --- /dev/null +++ b/rag/docs/basic_tier_workaround.md @@ -0,0 +1,356 @@ +# Event Hub Basic Tier 제약사항 및 해결 방법 + +## 현재 상황 + +``` +Event Hub Namespace: hgzero-eventhub-ns +Resource Group: rg-digitalgarage-02 +Location: koreacentral +Tier: Basic ⚠️ +Status: Active +``` + +## Basic Tier 제약사항 + +| 기능 | Basic | Standard | Premium | +|------|-------|----------|---------| +| **Consumer Groups** | **1개만** ($Default) | **최대 20개** | 최대 100개 | +| 파티션 | 최대 32개 | 최대 32개 | 최대 100개 | +| 메시지 보존 | 1일 | 7일 | 90일 | +| Capture | ❌ | ✅ | ✅ | +| 가격 | 낮음 | 중간 | 높음 | + +**Basic Tier에서는 `$Default` Consumer Group만 사용할 수 있습니다.** + +--- + +## 해결 방법 + +### 방법 1: Tier 업그레이드 (권장) ⭐️ + +Event Hub를 Basic → Standard로 업그레이드하면 최대 20개의 Consumer Group 사용 가능 + +#### 업그레이드 방법 + +**Azure Portal:** +1. Event Hub Namespace (hgzero-eventhub-ns) 페이지로 이동 +2. 왼쪽 메뉴에서 "Pricing tier" 클릭 +3. "Standard" 선택 +4. "Apply" 버튼 클릭 +5. 약 1-2분 후 적용 완료 + +**Azure CLI:** +```bash +az eventhubs namespace update \ + --resource-group rg-digitalgarage-02 \ + --name hgzero-eventhub-ns \ + --sku Standard \ + --capacity 1 +``` + +**비용:** +- Basic: ~$0.015/시간 (~$11/월) +- Standard: ~$0.03/시간 (~$22/월) +- 차이: 약 $11/월 추가 + +**장점:** +- ✅ 여러 Consumer Group 사용 가능 +- ✅ 메시지 보존 기간 7일로 증가 +- ✅ Capture 기능 사용 가능 +- ✅ 영구적 해결책 + +**단점:** +- ❌ 비용 증가 (약 2배) +- ❌ 관리자 승인 필요할 수 있음 + +--- + +### 방법 2: $Default Consumer Group 공유 사용 (임시) + +개발/테스트 시 기존 프로덕션 Consumer를 잠시 중지하고 테스트 + +#### 실행 순서 + +**Step 1: 프로덕션 Consumer 중지** +```bash +# 기존 Consumer 프로세스 확인 +ps aux | grep "start_consumer.py" | grep -v grep + +# PID 확인 후 종료 +kill + +# 예시 +kill 51257 +``` + +**Step 2: 테스트 Consumer 실행** +```bash +cd /Users/daewoong/home/workspace/HGZero/rag +python start_consumer.py +``` + +**Step 3: 테스트 완료 후 프로덕션 재시작** +```bash +# Ctrl+C로 테스트 Consumer 종료 + +# 프로덕션 Consumer 재시작 +python start_consumer.py & +``` + +**장점:** +- ✅ 추가 비용 없음 +- ✅ 즉시 테스트 가능 +- ✅ 권한 불필요 + +**단점:** +- ❌ 프로덕션 서비스 중단 +- ❌ 동시 실행 불가 +- ❌ 임시 방법 + +**주의사항:** +- ⚠️ 프로덕션 환경에서만 사용 중이라면 비추천 +- ⚠️ 업무 시간 외에만 테스트 +- ⚠️ 테스트 후 반드시 프로덕션 재시작 확인 + +--- + +### 방법 3: Checkpoint 위치 변경으로 독립 실행 + +동일한 Consumer Group을 사용하되, checkpoint 저장 위치를 다르게 하여 독립적으로 실행 + +#### 구현 방법 + +**Step 1: 별도 Storage Container 생성** + +Azure Portal: +1. Storage Account (hgzerostorage) 접속 +2. "Containers" 클릭 +3. "+ Container" 클릭 +4. 이름: `hgzero-checkpoints-dev` +5. Create + +**Step 2: config_dev.yaml 생성** + +```yaml +# config_dev.yaml +eventhub: + connection_string: ${EVENTHUB_CONNECTION_STRING} + name: ${EVENTHUB_NAME} + consumer_group: "$Default" # 동일 + storage: + connection_string: ${AZURE_STORAGE_CONNECTION_STRING} + container_name: "hgzero-checkpoints-dev" # 다른 컨테이너! + +# 나머지는 config.yaml과 동일 +``` + +**Step 3: 개발용 Consumer 실행 스크립트** + +```python +# start_dev_consumer.py +import asyncio +from pathlib import Path + +from src.utils.config import load_config +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 + +async def main(): + # 개발용 설정 파일 로드 + config_path = Path(__file__).parent / "config_dev.yaml" + config = load_config(str(config_path)) + + # ... 나머지는 start_consumer.py와 동일 + +if __name__ == "__main__": + asyncio.run(main()) +``` + +**Step 4: 실행** + +```bash +# Terminal 1: 프로덕션 Consumer +python start_consumer.py + +# Terminal 2: 개발 Consumer (다른 checkpoint) +python start_dev_consumer.py +``` + +**장점:** +- ✅ 동시 실행 가능 +- ✅ 독립적인 checkpoint +- ✅ 추가 비용 거의 없음 (Storage만) +- ✅ Tier 업그레이드 불필요 + +**단점:** +- ❌ 동일 파티션을 두 Consumer가 읽으려 하면 ownership 경쟁 +- ❌ 한쪽만 이벤트 수신 (ownership을 가진 쪽) +- ❌ 완전한 독립 실행은 아님 + +**결론:** +- 이 방법은 **checkpoint만 독립**이고, **여전히 ownership 경쟁** 발생 +- **동시 실행은 불가능** +- 권장하지 않음 ❌ + +--- + +### 방법 4: 로컬 개발 환경에서만 테스트 + +Event Hub 대신 로컬 메시지 큐 사용 + +#### 옵션 A: Azure Event Hub Emulator (권장) + +현재는 공식 Emulator가 없으므로, Kafka나 RabbitMQ로 대체 + +#### 옵션 B: 메모리 큐로 테스트 + +```python +# test_consumer_local.py +import asyncio +import json +from queue import Queue + +# 로컬 메모리 큐 +local_queue = Queue() + +async def test_event_processing(): + """로컬에서 이벤트 처리 로직만 테스트""" + + # 테스트 이벤트 생성 + test_event = { + 'eventType': 'MINUTES_FINALIZED', + 'data': { + 'meetingId': 'test-001', + 'title': '테스트 회의', + 'minutesId': 'minutes-001', + 'sections': [] + } + } + + # Consumer의 _process_minutes_event 로직만 테스트 + from src.services.eventhub_consumer import EventHubConsumer + + # 실제 처리 로직 테스트 + # ... + +asyncio.run(test_event_processing()) +``` + +**장점:** +- ✅ 완전 독립 실행 +- ✅ 무료 +- ✅ 빠른 테스트 + +**단점:** +- ❌ 실제 Event Hub와 다른 환경 +- ❌ 통합 테스트 불가 + +--- + +## 권장 솔루션 + +### 개발 단계별 권장 방법 + +| 단계 | 권장 방법 | 이유 | +|------|----------|------| +| **로컬 개발** | 방법 4 (메모리 큐) | 빠르고 비용 없음 | +| **통합 테스트** | 방법 2 ($Default 공유) | 실제 환경, 단기간 | +| **지속적 개발** | 방법 1 (Tier 업그레이드) | 영구 해결, 동시 실행 | +| **프로덕션** | 방법 1 (Standard Tier) | 고가용성, 확장성 | + +### 최종 권장: Tier 업그레이드 + +**이유:** +1. ✅ 여러 Consumer Group으로 개발/테스트 분리 +2. ✅ 메시지 보존 기간 증가 (1일 → 7일) +3. ✅ 향후 확장 가능 (Capture 등) +4. ✅ 프로덕션 안정성 향상 + +**비용 대비 효과:** +- 월 $11 추가로 개발 생산성 향상 +- 프로덕션 중단 없이 테스트 가능 +- 장기적으로 더 경제적 + +--- + +## 실행 가이드 + +### 즉시 테스트가 필요한 경우 (방법 2) + +```bash +# 1. 프로덕션 Consumer 중지 +ps aux | grep "start_consumer.py" | grep -v grep +kill + +# 2. 테스트 실행 +cd /Users/daewoong/home/workspace/HGZero/rag +python start_consumer.py + +# 3. 테스트 완료 후 +# Ctrl+C로 종료 + +# 4. 프로덕션 재시작 +python start_consumer.py & +``` + +### Tier 업그레이드 후 (방법 1) + +```bash +# 1. Tier 업그레이드 (Azure Portal 또는 CLI) +az eventhubs namespace update \ + --resource-group rg-digitalgarage-02 \ + --name hgzero-eventhub-ns \ + --sku Standard + +# 2. Consumer Group 생성 +az eventhubs eventhub consumer-group create \ + --resource-group rg-digitalgarage-02 \ + --namespace-name hgzero-eventhub-ns \ + --eventhub-name hgzero-eventhub-name \ + --name development + +# 3. config.yaml 수정 +# consumer_group: "development" + +# 4. 프로덕션은 계속 실행, 개발 Consumer 별도 실행 +python start_consumer.py +``` + +--- + +## 요약 + +### 현재 상황 +- ❌ Event Hub Tier: **Basic** +- ❌ Consumer Group: **$Default만 사용 가능** +- ❌ 추가 Consumer Group 생성 불가 + +### 해결책 +1. **단기**: 프로덕션 Consumer 잠시 중지하고 테스트 (방법 2) +2. **장기**: Standard Tier로 업그레이드 (방법 1) ⭐️ + +### 다음 액션 +관리자에게 **Tier 업그레이드** 요청하거나, +긴급하다면 **프로덕션 중지 후 테스트** 진행 + +--- + +## 참고: Tier 비교 + +``` +Basic Tier (현재) +├─ Consumer Groups: 1개 ($Default만) +├─ 보존 기간: 1일 +├─ 비용: ~$11/월 +└─ ❌ 개발/테스트 분리 불가 + +Standard Tier (권장) +├─ Consumer Groups: 최대 20개 ✅ +├─ 보존 기간: 7일 +├─ 비용: ~$22/월 (+$11) +└─ ✅ 개발/테스트 완전 분리 +``` + +Standard Tier로 업그레이드하는 것을 강력히 권장합니다! 🎯 diff --git a/rag/docs/check_consumers_guide.md b/rag/docs/check_consumers_guide.md new file mode 100644 index 0000000..58def93 --- /dev/null +++ b/rag/docs/check_consumers_guide.md @@ -0,0 +1,367 @@ +# Event Hub Active Consumers 조회 가이드 + +## 개요 + +Event Hub를 현재 읽고 있는 Consumer(host)를 확인하는 방법을 설명합니다. + +## 방법 1: 제공된 스크립트 사용 (가장 쉬움) ⭐️ + +### 실행 + +```bash +cd /Users/daewoong/home/workspace/HGZero/rag +python check_active_consumers.py +``` + +### 출력 정보 + +``` +📊 Event Hub Active Consumers +================================================================================ +Consumer Group: $Default +Container: hgzero-checkpoints + +🔍 Ownership 정보 (현재 파티션을 읽고 있는 Consumer) +-------------------------------------------------------------------------------- +파티션 0: + 상태: 🟢 ACTIVE + Owner ID: 73fda457-b555-4af5-873a-54a2baa5fd95... + 마지막 갱신: 2025-10-29 12:35:42 UTC + 경과 시간: 15초 전 + +📋 Consumer 요약 +-------------------------------------------------------------------------------- +Consumer #1 🟢 ACTIVE + Owner ID: 73fda457-b555-4af5-873a-54a2baa5fd95 + 소유 파티션: 0 + 파티션 개수: 1 + 마지막 활동: 2025-10-29 12:35:42 UTC + +📍 Checkpoint 정보 (마지막 읽은 위치) +-------------------------------------------------------------------------------- +파티션 0: + Offset: 120259090624 + Sequence Number: 232 +``` + +--- + +## 방법 2: Python 코드로 직접 조회 + +### 스크립트 예시 + +```python +import asyncio +import json +from datetime import datetime, timezone +from pathlib import Path +from azure.storage.blob import BlobServiceClient +from src.utils.config import load_config + + +async def check_consumers(): + """활성 Consumer 조회""" + + # 설정 로드 + config_path = Path('config.yaml') + config = load_config(str(config_path)) + + eventhub_config = config['eventhub'] + storage_conn_str = eventhub_config['storage']['connection_string'] + container_name = eventhub_config['storage']['container_name'] + consumer_group = eventhub_config['consumer_group'] + + # Blob Service Client + blob_service = BlobServiceClient.from_connection_string(storage_conn_str) + container = blob_service.get_container_client(container_name) + + # Ownership 정보 조회 + ownership_prefix = f"{consumer_group}/ownership/" + + print(f"Consumer Group: {consumer_group}\n") + + for blob in container.list_blobs(name_starts_with=ownership_prefix): + blob_client = container.get_blob_client(blob.name) + content = blob_client.download_blob().readall() + + ownership_data = json.loads(content) + partition_id = blob.name.split('/')[-1] + owner_id = ownership_data.get('ownerIdentifier', 'unknown') + + # 활성 상태 확인 (60초 이내 갱신) + now = datetime.now(timezone.utc) + time_diff = (now - blob.last_modified).total_seconds() + is_active = time_diff < 60 + + status = "🟢 ACTIVE" if is_active else "🔴 INACTIVE" + + print(f"파티션 {partition_id}: {status}") + print(f" Owner: {owner_id}") + print(f" 갱신: {int(time_diff)}초 전\n") + + +asyncio.run(check_consumers()) +``` + +--- + +## 방법 3: Azure Portal에서 확인 + +### 단계 + +1. **Azure Portal** 접속 (https://portal.azure.com) +2. **Storage Account** 이동 + - "hgzerostorage" 검색 +3. **Containers** 클릭 + - "hgzero-checkpoints" 선택 +4. **폴더 구조 확인** + ``` + $Default/ + ├── ownership/ + │ └── 0 ← 파티션 0의 소유권 정보 + └── checkpoint/ + └── 0 ← 파티션 0의 checkpoint + ``` +5. **ownership/0 파일 다운로드** 또는 **View** 클릭 +6. **JSON 내용 확인** + ```json + { + "ownerIdentifier": "73fda457-b555-4af5-873a-54a2baa5fd95", + "lastModifiedTime": "2025-10-29T12:35:42Z", + ... + } + ``` + +### 정보 해석 + +- **ownerIdentifier**: 현재 Consumer의 고유 ID +- **lastModifiedTime**: 마지막 lease 갱신 시간 + - 60초 이내: 🟢 활성 상태 + - 60초 이상: 🔴 비활성 (Consumer 종료됨) + +--- + +## 방법 4: Azure CLI로 조회 + +### Blob 목록 확인 + +```bash +# Storage Account 키 조회 +az storage account keys list \ + --resource-group rg-digitalgarage-02 \ + --account-name hgzerostorage \ + --query "[0].value" -o tsv + +# Blob 목록 조회 +az storage blob list \ + --account-name hgzerostorage \ + --container-name hgzero-checkpoints \ + --prefix "\$Default/ownership/" \ + --output table +``` + +### Blob 내용 다운로드 + +```bash +# ownership 정보 다운로드 +az storage blob download \ + --account-name hgzerostorage \ + --container-name hgzero-checkpoints \ + --name "\$Default/ownership/0" \ + --file /tmp/ownership.json + +# 내용 확인 +cat /tmp/ownership.json | python3 -m json.tool +``` + +--- + +## 방법 5: 프로세스 레벨에서 확인 + +### 로컬 머신에서 실행 중인 Consumer + +```bash +# Consumer 프로세스 확인 +ps aux | grep "start_consumer.py" | grep -v grep + +# 출력: +# daewoong 81447 0.0 0.2 python start_consumer.py +``` + +### 네트워크 연결 확인 + +```bash +# Event Hub와의 연결 확인 +lsof -i -n | grep 81447 | grep ESTABLISHED + +# 출력: +# python3.1 81447 daewoong 9u IPv6 TCP ... -> ...servicebus.windows.net:https (ESTABLISHED) +``` + +**의미:** +- Consumer 프로세스가 실행 중 +- Event Hub와 HTTPS 연결 유지 중 +- 이벤트 수신 대기 중 + +--- + +## 주요 개념 + +### Ownership (소유권) + +``` +파티션 0 + ↓ +Ownership Blob (Blob Storage) + ↓ +{ + "ownerIdentifier": "consumer-uuid", + "lastModifiedTime": "2025-10-29T12:35:42Z", + "eTag": "...", + ... +} + ↓ +Lease 메커니즘 (30초마다 갱신) + ↓ +갱신 실패 시 → 다른 Consumer가 인수 가능 +``` + +### Checkpoint (읽은 위치) + +``` +파티션 0 + ↓ +Checkpoint Blob + ↓ +{ + "offset": "120259090624", + "sequenceNumber": 232, + ... +} + ↓ +Consumer 재시작 시 → 이 위치부터 재개 +``` + +### Consumer 상태 판단 + +| 조건 | 상태 | 의미 | +|------|------|------| +| lastModifiedTime < 60초 | 🟢 ACTIVE | 정상 동작 중 | +| 60초 < lastModifiedTime < 180초 | 🟡 WARNING | Lease 갱신 지연 | +| lastModifiedTime > 180초 | 🔴 INACTIVE | Consumer 종료 | + +--- + +## 트러블슈팅 + +### 문제 1: Ownership 정보가 없음 + +**증상:** +``` +⚠️ 소유권 정보가 없습니다. Consumer가 실행되지 않았을 수 있습니다. +``` + +**원인:** +- Consumer가 한 번도 실행되지 않음 +- Consumer가 ownership claim에 실패함 + +**해결:** +1. Consumer 프로세스 확인: `ps aux | grep start_consumer` +2. Consumer 로그 확인 +3. 권한 확인 (Storage Account 접근 권한) + +### 문제 2: 여러 Owner ID가 나타남 + +**증상:** +``` +Consumer #1: owner-id-1 (파티션 0, 2, 4) +Consumer #2: owner-id-2 (파티션 1, 3, 5) +``` + +**원인:** +- 정상: 여러 Consumer가 파티션을 나눠서 처리 +- 파티션이 여러 개이고 Consumer도 여러 개 + +**확인:** +- 각 파티션이 하나의 Consumer만 소유하면 정상 +- 동일 파티션을 여러 Consumer가 소유하면 문제 + +### 문제 3: lastModified가 오래됨 + +**증상:** +``` +파티션 0: + 상태: 🔴 INACTIVE + 마지막 갱신: 2025-10-29 10:00:00 UTC + 경과 시간: 7200초 전 (2시간) +``` + +**원인:** +- Consumer가 종료됨 +- Consumer가 응답 없음 (hang) +- 네트워크 문제 + +**해결:** +1. Consumer 프로세스 확인 +2. Consumer 재시작 +3. 로그 확인하여 에러 파악 + +--- + +## 실시간 모니터링 + +### 스크립트: 주기적 확인 + +```bash +#!/bin/bash +# monitor_consumers.sh + +while true; do + clear + echo "=== $(date) ===" + python check_active_consumers.py + sleep 30 # 30초마다 갱신 +done +``` + +### 실행 + +```bash +chmod +x monitor_consumers.sh +./monitor_consumers.sh +``` + +--- + +## 요약 + +### 빠른 확인 방법 + +```bash +# 1. 스크립트 실행 (가장 쉬움) +python check_active_consumers.py + +# 2. 프로세스 확인 +ps aux | grep start_consumer + +# 3. Azure Portal에서 Blob 확인 +# Storage Account > Containers > hgzero-checkpoints > $Default/ownership +``` + +### 확인 항목 체크리스트 + +- [ ] Consumer 프로세스 실행 중인가? +- [ ] Ownership 정보가 있는가? +- [ ] lastModified가 60초 이내인가? +- [ ] 각 파티션이 하나의 Consumer만 소유하는가? +- [ ] Checkpoint가 갱신되고 있는가? + +모든 항목이 체크되면 Consumer가 정상 동작 중입니다! ✅ + +--- + +## 참고 파일 + +- 스크립트: `/Users/daewoong/home/workspace/HGZero/rag/check_active_consumers.py` +- 설정: `/Users/daewoong/home/workspace/HGZero/rag/config.yaml` +- Blob Storage: `hgzerostorage/hgzero-checkpoints` diff --git a/rag/docs/consumer_group_setup.md b/rag/docs/consumer_group_setup.md new file mode 100644 index 0000000..03d2bf0 --- /dev/null +++ b/rag/docs/consumer_group_setup.md @@ -0,0 +1,494 @@ +# Consumer Group 생성 및 할당 가이드 + +## 목차 +1. [Consumer Group이란?](#consumer-group이란) +2. [생성 방법](#생성-방법) +3. [코드에서 사용하기](#코드에서-사용하기) +4. [검증 방법](#검증-방법) +5. [트러블슈팅](#트러블슈팅) + +--- + +## Consumer Group이란? + +Consumer Group은 Event Hub의 이벤트를 **독립적으로 읽는 논리적 그룹**입니다. + +### 주요 특징 +- 각 Consumer Group은 독립적인 checkpoint를 유지 +- 동일한 이벤트를 여러 Consumer Group이 각각 읽을 수 있음 +- 기본 Consumer Group: `$Default` (자동 생성됨) + +### 사용 사례 +| Consumer Group | 용도 | 설명 | +|---------------|------|------| +| `$Default` | 프로덕션 | 실제 운영 환경에서 사용 | +| `development` | 개발 | 개발자가 로컬에서 테스트 | +| `test` | 테스트 | QA 테스트 환경 | +| `analytics` | 분석 | 데이터 분석 및 모니터링 | +| `backup` | 백업 | 이벤트 백업 및 아카이빙 | + +--- + +## 생성 방법 + +### 방법 1: Azure Portal (가장 쉬움) ⭐️ + +#### 단계별 가이드 + +**Step 1: Azure Portal 접속** +``` +https://portal.azure.com +``` + +**Step 2: Event Hub Namespace 찾기** +1. 상단 검색창에 "hgzero-eventhub-ns" 입력 +2. "Event Hubs Namespaces" 아래의 결과 클릭 + +**Step 3: Event Hub 선택** +1. 왼쪽 메뉴에서 "Event Hubs" 클릭 +2. "hgzero-eventhub-name" 선택 + +**Step 4: Consumer Groups 관리** +1. 왼쪽 메뉴에서 "Consumer groups" 클릭 +2. 현재 목록에 `$Default`만 있을 것임 + +**Step 5: 새 Consumer Group 생성** +1. 상단의 "+ Consumer group" 버튼 클릭 +2. Name 입력: + - 개발용: `development` + - 테스트용: `test` + - 분석용: `analytics` +3. "Create" 버튼 클릭 + +**Step 6: 생성 확인** +- 목록에 새로운 Consumer Group이 추가되었는지 확인 +- 예: `$Default`, `development`, `test` + +--- + +### 방법 2: Azure CLI + +#### 사전 요구사항 +```bash +# Azure CLI 설치 확인 +az --version + +# 로그인 +az login +``` + +#### Consumer Group 생성 +```bash +# 리소스 그룹 확인 (필요 시) +az eventhubs namespace show \ + --name hgzero-eventhub-ns \ + --query resourceGroup -o tsv + +# Consumer Group 생성 +az eventhubs eventhub consumer-group create \ + --resource-group \ + --namespace-name hgzero-eventhub-ns \ + --eventhub-name hgzero-eventhub-name \ + --name development + +# 생성 확인 +az eventhubs eventhub consumer-group list \ + --resource-group \ + --namespace-name hgzero-eventhub-ns \ + --eventhub-name hgzero-eventhub-name \ + --output table +``` + +#### 출력 예시 +``` +Name ResourceGroup +----------- --------------- +$Default hgzero-rg +development hgzero-rg +test hgzero-rg +``` + +--- + +### 방법 3: Python Management SDK + +#### 설치 +```bash +pip install azure-mgmt-eventhub azure-identity +``` + +#### 코드 +```python +from azure.mgmt.eventhub import EventHubManagementClient +from azure.identity import DefaultAzureCredential + +# 인증 +credential = DefaultAzureCredential() +subscription_id = "" + +# 관리 클라이언트 생성 +mgmt_client = EventHubManagementClient(credential, subscription_id) + +# Consumer Group 생성 +mgmt_client.consumer_groups.create_or_update( + resource_group_name='', + namespace_name='hgzero-eventhub-ns', + event_hub_name='hgzero-eventhub-name', + consumer_group_name='development', + parameters={} # 추가 설정 가능 +) + +print("✅ Consumer Group 'development' 생성 완료") + +# Consumer Group 목록 조회 +consumer_groups = mgmt_client.consumer_groups.list_by_event_hub( + resource_group_name='', + namespace_name='hgzero-eventhub-ns', + event_hub_name='hgzero-eventhub-name' +) + +print("\n현재 Consumer Groups:") +for cg in consumer_groups: + print(f" - {cg.name}") +``` + +--- + +## 코드에서 사용하기 + +### 1. config.yaml 수정 + +#### 기존 설정 +```yaml +eventhub: + connection_string: ${EVENTHUB_CONNECTION_STRING} + name: ${EVENTHUB_NAME} + consumer_group: ${AZURE_EVENTHUB_CONSUMER_GROUP} # "$Default" + storage: + connection_string: ${AZURE_STORAGE_CONNECTION_STRING} + container_name: ${AZURE_STORAGE_CONTAINER_NAME} +``` + +#### 개발 환경용 설정 +```yaml +eventhub: + connection_string: ${EVENTHUB_CONNECTION_STRING} + name: ${EVENTHUB_NAME} + consumer_group: "development" # 직접 지정 + storage: + connection_string: ${AZURE_STORAGE_CONNECTION_STRING} + container_name: ${AZURE_STORAGE_CONTAINER_NAME} +``` + +### 2. .env 파일 수정 (선택사항) + +#### 환경 변수로 관리하는 경우 +```bash +# .env +EVENTHUB_CONNECTION_STRING="Endpoint=sb://hgzero-eventhub-ns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=..." +EVENTHUB_NAME=hgzero-eventhub-name +AZURE_EVENTHUB_CONSUMER_GROUP=development # 변경 +AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=https;AccountName=hgzerostorage;..." +AZURE_STORAGE_CONTAINER_NAME=hgzero-checkpoints +``` + +### 3. Consumer 실행 + +#### 개발 환경 +```bash +# config.yaml의 consumer_group을 "development"로 설정 +cd /Users/daewoong/home/workspace/HGZero/rag +python start_consumer.py +``` + +#### 프로덕션 환경 +```bash +# config.yaml의 consumer_group을 "$Default"로 설정 +python start_consumer.py +``` + +#### 여러 환경 동시 실행 +```bash +# Terminal 1: 프로덕션 Consumer +AZURE_EVENTHUB_CONSUMER_GROUP=$Default python start_consumer.py + +# Terminal 2: 개발 Consumer +AZURE_EVENTHUB_CONSUMER_GROUP=development python start_consumer.py + +# Terminal 3: 테스트 Consumer +AZURE_EVENTHUB_CONSUMER_GROUP=test python start_consumer.py +``` + +--- + +## 검증 방법 + +### 1. Consumer Group 목록 확인 + +#### Python으로 확인 +```python +import asyncio +from pathlib import Path +from azure.eventhub.aio import EventHubConsumerClient +from src.utils.config import load_config + +async def list_consumer_groups(): + """사용 가능한 Consumer Group 확인""" + config_path = Path('config.yaml') + config = load_config(str(config_path)) + + eventhub_config = config['eventhub'] + + # 여기서는 실제로 Management API를 사용해야 하지만 + # Consumer Client로는 자신이 속한 그룹만 확인 가능 + + print(f"현재 설정된 Consumer Group: {eventhub_config['consumer_group']}") + +asyncio.run(list_consumer_groups()) +``` + +### 2. 다른 Consumer Group으로 테스트 + +```python +import asyncio +import json +from pathlib import Path +from azure.eventhub.aio import EventHubConsumerClient +from azure.eventhub.extensions.checkpointstoreblobaio import BlobCheckpointStore +from src.utils.config import load_config + +async def test_consumer_group(consumer_group_name): + """특정 Consumer Group으로 이벤트 수신 테스트""" + config_path = Path('config.yaml') + config = load_config(str(config_path)) + + eventhub_config = config['eventhub'] + + # Checkpoint Store + checkpoint_store = BlobCheckpointStore.from_connection_string( + eventhub_config['storage']['connection_string'], + eventhub_config['storage']['container_name'] + ) + + # Consumer Client (Consumer Group 지정) + client = EventHubConsumerClient.from_connection_string( + eventhub_config['connection_string'], + consumer_group=consumer_group_name, # 여기서 지정! + eventhub_name=eventhub_config['name'], + checkpoint_store=checkpoint_store + ) + + print(f"✅ Consumer Group '{consumer_group_name}'로 연결 시도...") + + event_count = 0 + + async def on_event(partition_context, event): + nonlocal event_count + event_count += 1 + print(f"이벤트 수신: #{event_count}") + await partition_context.update_checkpoint(event) + + async def on_error(partition_context, error): + print(f"에러: {error}") + + try: + async with client: + receive_task = asyncio.create_task( + client.receive( + on_event=on_event, + on_error=on_error, + starting_position="@earliest" + ) + ) + + await asyncio.sleep(10) # 10초 대기 + receive_task.cancel() + + try: + await receive_task + except asyncio.CancelledError: + pass + + print(f"\n✅ 테스트 완료: {event_count}개 이벤트 수신") + + except Exception as e: + print(f"❌ 에러 발생: {str(e)}") + +# 테스트 실행 +asyncio.run(test_consumer_group("development")) +``` + +### 3. Checkpoint 저장 위치 확인 + +각 Consumer Group은 독립적인 checkpoint를 Blob Storage에 저장합니다: + +``` +hgzero-checkpoints (Container) +├─ $Default/ +│ ├─ ownership/ +│ │ └─ 0 (파티션 0의 소유권 정보) +│ └─ checkpoint/ +│ └─ 0 (파티션 0의 checkpoint) +├─ development/ +│ ├─ ownership/ +│ │ └─ 0 +│ └─ checkpoint/ +│ └─ 0 +└─ test/ + ├─ ownership/ + │ └─ 0 + └─ checkpoint/ + └─ 0 +``` + +--- + +## 트러블슈팅 + +### 문제 1: Consumer Group을 찾을 수 없음 + +**증상** +``` +azure.eventhub.exceptions.EventHubError: The messaging entity 'sb://hgzero-eventhub-ns.servicebus.windows.net/hgzero-eventhub-name/ConsumerGroups/development' could not be found. +``` + +**원인**: Consumer Group이 실제로 생성되지 않음 + +**해결**: +1. Azure Portal에서 Consumer Group 목록 확인 +2. 없으면 생성 +3. 이름 오타 확인 (대소문자 구분) + +### 문제 2: Ownership claim 실패 + +**증상** +``` +EventProcessor 'xxx' hasn't claimed an ownership. It keeps claiming. +``` + +**원인**: +- 동일 Consumer Group에 이미 다른 Consumer가 실행 중 +- 파티션보다 Consumer가 많음 + +**해결**: +1. 기존 Consumer 종료 +2. 다른 Consumer Group 사용 +3. 파티션 수 증가 + +### 문제 3: 이벤트를 읽지 못함 + +**증상**: Consumer는 실행되지만 이벤트가 수신되지 않음 + +**원인**: +- Starting position이 최신으로 설정됨 +- 새 이벤트가 없음 + +**해결**: +```python +# config.yaml 또는 코드에서 +await client.receive( + on_event=on_event, + on_error=on_error, + starting_position="@earliest" # 처음부터 읽기 +) +``` + +### 문제 4: Checkpoint가 초기화되지 않음 + +**증상**: 새 Consumer Group인데 이미 읽은 것처럼 동작 + +**원인**: Blob Storage에 이전 checkpoint가 남아있음 + +**해결**: +```bash +# Azure Portal에서 +# Storage Account > Containers > hgzero-checkpoints +# 해당 Consumer Group 폴더 삭제 +``` + +또는 코드로: +```python +from azure.storage.blob import BlobServiceClient + +blob_service = BlobServiceClient.from_connection_string( + AZURE_STORAGE_CONNECTION_STRING +) +container = blob_service.get_container_client("hgzero-checkpoints") + +# 특정 Consumer Group의 checkpoint 삭제 +prefix = "development/" +blobs = container.list_blobs(name_starts_with=prefix) +for blob in blobs: + container.delete_blob(blob.name) + print(f"삭제: {blob.name}") +``` + +--- + +## 권장 설정 + +### 환경별 Consumer Group 전략 + +```yaml +# 프로덕션 +production: + consumer_group: "$Default" + starting_position: "-1" # 최신 이벤트부터 + checkpoint_interval: 30 # 30초마다 checkpoint + +# 개발 +development: + consumer_group: "development" + starting_position: "@earliest" # 처음부터 + checkpoint_interval: 10 # 자주 checkpoint (테스트용) + +# 테스트 +test: + consumer_group: "test" + starting_position: "@earliest" + checkpoint_interval: 5 # 매우 자주 (빠른 테스트) + +# 분석 +analytics: + consumer_group: "analytics" + starting_position: "@earliest" # 모든 데이터 분석 + checkpoint_interval: 60 # 덜 자주 (성능) +``` + +### 실행 스크립트 예시 + +```bash +#!/bin/bash +# start_dev_consumer.sh + +export AZURE_EVENTHUB_CONSUMER_GROUP=development +cd /Users/daewoong/home/workspace/HGZero/rag +python start_consumer.py +``` + +--- + +## 요약 + +### 빠른 시작 체크리스트 + +- [ ] Azure Portal에서 Consumer Group 생성 + - [ ] 이름: `development` + - [ ] Event Hub: `hgzero-eventhub-name` +- [ ] `config.yaml` 수정 + - [ ] `consumer_group: "development"` 설정 +- [ ] Consumer 실행 + - [ ] `python start_consumer.py` +- [ ] 검증 + - [ ] 이벤트 수신 확인 + - [ ] Blob Storage에 checkpoint 생성 확인 + +### Consumer Group 활용 팁 + +1. **프로덕션과 개발 분리**: 항상 다른 Consumer Group 사용 +2. **테스트는 독립적으로**: `test` Consumer Group으로 자유롭게 실험 +3. **Checkpoint 관리**: 필요시 삭제하여 처음부터 재처리 +4. **모니터링**: 각 Consumer Group별 lag 모니터링 +5. **비용 최적화**: 불필요한 Consumer Group은 삭제 + +이제 원하는 Consumer Group을 만들고 독립적으로 Event Hub를 사용할 수 있습니다! 🎯 diff --git a/rag/eventhub_guide.md b/rag/eventhub_guide.md new file mode 100644 index 0000000..7e911e9 --- /dev/null +++ b/rag/eventhub_guide.md @@ -0,0 +1,378 @@ +# 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/src/api/__pycache__/main.cpython-311.pyc b/rag/src/api/__pycache__/main.cpython-311.pyc index cd6d2fbdbb422953c8f17474a575085eab3e35ee..4a523aceae7cc0be2d06683183acbd0a327c0ab3 100644 GIT binary patch delta 8694 zcmbt3YjhK5b~BPC%hp)3WZ9A}KgJki8~o&9jBJbz2J4&o5MoK1XqH zv7@B7gr>MmPHiuBl=YU8GGk{Q<-O&koMT_)sOYUAWsQBYqq4V>l(qIHj;h`&M|E#C zspr~j97}tblCsXe%u(B0OUinCouj_Do~C3JuRhj*YTyIqCmW?AMR9qz4A*58^)`Ic z6C-bm*ZJkwX=sN}dU{s?I~kYH6>!E|rt5NOgD=*$l3zKwO8ltVVCR)w;ULWw5eTJQ z=IaU|g-?1wLq%URe5>JWfo~0b7Wi7>YvYQ?sNS_)3BY!)6yQ3p3}6Sx0_^0<0j}p3 z0o(uryFg%mRYj_r+~P6nI*58ZE|BWo2(+7!)>+A`cwJ$l<<^o^6Tkp7`1VwO1lO60 z8<25Td@fhbmvJ@x(g7v6bWAZ%W_Mh_ZOeG=H<2?ybG7_tW_;~VN<#I4~g zV)|RsWbR1l-?{+5c``uvHt;F%gSc6n#%pJs*M^1SI-M8tk#XzN`0R??!PfzHDEa@} zf%tYq>i7oa5Sztu+i;zHJ;dkwR9)&Rs&_ZPoZIj;S-FHlj^-5hJ-vH?;htlA<8zx| z$#roXZ*3Cmm4$To^k(G>n$8ftnadi&`FnVKpPT2l+lD-D-nEB+#>2bZ;ez>S*RXTQ z#fxucUe?sm;p{y;XLD`n>p#j*cc@m#=n~PL%_~-c!0tExC7V`bNhn27DE_Cq#JCcQ zVf7&Iwz_%2VdahpZGhP&mN2b!^YkIcMDJOL)Ex*q5v&JLBM)adA7zItH-`V-=NhY*#RYX1Cb30 zSBU?pFA&#i%Ym6y`&iilNMW7Wo4YiJXsM9YUMF72E!Z8?TVv%NM|h624Gmfc`5{UD zGUymre+zO>R$qrIq;}egG~$2d+ClIk=B`+&FO`J%h+Fh!8#|y`=s~at0lFJ3rnUCl z`#ch3p zPBc)|Xur5yT`c~EZnJo|!>CiH#;=z~Y+fd(O5Im(Wr<8~nJ?SJ04owlY~&~BBY$>f zM_3_XScNl=Iw1rzhMj^tEaQ%ZRl|KQ*Kw!7g>yN+-w8t#cqtxT`)U-zLEs}CLePug zTL``lpe7^C03~p=_G6?x?p}xX@Lj)Z{b%8cVRMbrhJ3Z<)u7 zk7GB|_Z0S(3rPrZTQN(o6z#=LG9@j(R(uFz_`i$SN-G149f!oulI3wNPL@2`vK+A) z$Vn?4#WK!5;TQs(@nOcr_X+(+t*}H1C&QT#1RlHFB?zLXw6X|2B0P&^Di_ZWS#6w4 zcn)#r#qFhL6ImhR3~&u{30I(XdU~|9Lr$Nc{;2#5ntnmNR#8SjFaC8!arZ^+`yzsu z5uk208Nzui6Sc@tUxlg*HD=+FjIF|$K>@<+fHzE+FCLexuVJ^>5WFDXuKIQb>3kFF zVO_s-$jzT13zx^iga3pdBHi2Kis~i4=b^Zxh7l$ag>u3Se`46)XB(14`~dNI*b?4C za05Xuf`zotl(e6->>Ef)R3U~UgUJLO4h9}!r3MM!iG#-J-&Fsz%=|9arvQXCM^0K@ zPLI&fTiqvzdEq_ri)Cd>)ES0J*BW;$poQdLIk90_;d1xEfQevSV~9|~Ic`L&MDZg) zJ~cg1yIQUuLiPdzr+A~mN1qU@8%xZmu@^0nuyIMOMu|U!G4XI?4gHdMrm+Je@YBW( z=DPrrXML>4gm|cF9rU=|R7Tt&ya06Qi$BLss6{yE=*c63je~_2!%`sg z=_lCwR|xJP_*x5ON)bMTL?pt=kS;+roI7B%Ljds{E^`>+^^%3qHHX1O@JOMS8=DWX z=fy(j=Ro3~=9hmW^Zgxi{uudXftxs|1A<2Q1tO;rNM3@{j+#v2Hew72zE)qkKvewz ziPHT=w$Hd4#Alf<;S-?!zWBkaY5FgxZOyb?8S~okn(xpz#mJhniU4xE2cU))3b4F@ zFX}A~bWnWCvNr=4G_ie+QFVE2_KmX^_OTeW)L9b)0oRb}dIlMhC?THu9#)BKK7&$N zZimg7j50B;rI3s{!zBAS?l$V**T$k{1&I1$1?{wuM3u|d4F?hX3;)2$sX z^w#-qRZ4DMKwx|h5`hbNRQ#~hsQdzCP%<&x`D*1ULqp%Ntsy48AvWHyI%#k1&k%Fh z8e~r?#VdwNd4@Mb{AsgEWuv66U%a}yEMFF{A!B?-6kY|88S~{_M(Pn^L>X&QaLRct znNmyov0_9e-tMSSWO=D$8KQ1kahq59D#c}ERT4*0P*+1;F|V$it6$9=$@0o4X|Z#4 zetuT!d1fTrn=RC!5IN(`5+|1!OkBv*qv!A9xUo~=8sJ+Z2gUJo?Y==hg%}mXG&}8h20xxqc2fdKt zl}&1}pP4zPjmw;;k%kPx=q?wB3yX@tNv5mvR1%tkf$5OVUQMzCp`37D@(^wnUI(YY zopAh!mMa2JY3F-tBsV^+nk>!?6uI*$ysCx9=O}iU#|J|}uT*Ve1SJcMAa^fSLAecc z{T5RK9Ij4N?!_s%?ISvOLUW3m%)?}jw$xoSN9EOt?S&P)lATzV+McRWx;r^`ME57U zuTMRC`6mr*B1kuiUJe z*U#l~IQoQ>@g77cQ0Cx2|`xw))BSV1n5 zVdb#E57Y_hokTmVFjh{H(E~O85xK;9P5he+wL<0DGzmj@05B%VOVJNIJOi zEHz3+DY-#22fj2EJ(g3tDt~Sxyf+G@|514g5xG}-Ftw9DCP^&}Gz;s&16@+Y#8qAc zItyxOBWa|*!R=DQ#baEETw*2Q^~tkD{H(po2c7XC?qLC>tr&5m#tw)cOw1*sj*UEb zH8S=d8;Q5#))ASy5qb4IoWP{BDPRP0Ow{uy`t6uRiFp`SsD2t+#a}k+#MjpJR0@8i z{SAWjLn~kt_FjAx?Y$LHXm6!CI|*b{I^*LkDyKsHuBBpCaucyKkq8~hgIfaLSAL7G zyF?Abnc~TU5n60qYr>s))dksEGTrskt`WDb@Jk>fK8jI_|I=P1-Dah`SH6^tc?!tp zPVM2W#8Q-WV%Inz<70Q#$2=kYJNEe}1ZWcB9D-Q{OAz3hKg=YrKtd4la1HRqt~ZH; ze~n(cgpqSFIrBe2QYqI!W;(87kQ53tQcarnVRbwxV2TU>h5~i*NiWeo&7TZwNHKAT z3+o)dSZZ;OhB?ybN`#m+FcOF48mNu)j1QdL3iKc@X~B#YrTbu>l&+GNpLnm|Lk9*u z{5L+h7yk$RK^(U2qZMt*S*uH@UOF{dH>D34R|btM?;Bh08CzzIcNYbW8-vD;<4nj{ zao<>V&scRsHMKNgTpKj51!TdZ`vptx6)c(b+~5KQD}n_p#?^Dkktsm71`Arp)xTD0 z&Z&K8)PBRhyT)MW9{3M$K(#-p+V5BGkE*EL;wVMuv=cCSAXwQvR}Ev^J`M%2&83{w}sM=4c)>RF?Lf8g<|7U$qILVRJyWC8*ls zS8a(ZDYn*M+;QVTu&y2cX zFm9tB#%@K~yMoLvKeLPY z6-~2k${Sq01^&YuQ1t{=J$_XW7{^?FzsPd0$THIwZ1wF66zvZd?H|`Zz;M8BJs-%Y zb_N=|f{k5Jk=}r6dr-CAui6gX^UCk*o9^kGLdDBM`ofEKq4Mfr`C1YIjnOPBZ~0f0 zA`dd80LC+;xrx;^n=&tg45}G3sAkNdnzP5XPe%1rmf@WCj5frSgvd%a;e*93z%&Gz zh7e=?Dl;Pshyj45va*vrf8Ybx%(}qpZNb$rzys17P#p}a4*FFGL)ucms#N@RU6ZNf zL-|bSkCk_n{`?Mj1FFuTs?)FP6u+ohvXzCIIJRN+HZ}FLwr&ml`&4b{sg-|P)~V{L zlK(@M0xDsZ)ry%KtMyc7V?Ft^b->RCu#_K!?j+4!vroLbex^Wpgb2I?NVyZ-Kn0U% z-(d3Lz8BVVN9y}dc?A3+faIr&5UT@h(uoFt=P)DQ82h!rRX^|7gJNuDJZ>8-!P06d z;F*N{xD(b&_{6Uk0;o!bMR`|2A&VuQ)Si?m5X!}(u38^vYQplq;o-2RkKdU=@Nk1YHQa5$r^;AHiV+WMdhC68?EZ$ ztkC-o68#9l&k=lr;By3+S`je!A>hIp&h)@fC{AH0EEhaO^YZF{P_@C<0}tsRXE= z{(bENzZvJwwxN zQ3_!wXHis+g)a?kR6+1c%CIDwNs1~;Uz|)W_4!Ip$#&AfIw~VnN9E$7ZEYk;_rC`S BPc#4k delta 3882 zcma)8YiwLc6~41iyMD)xcWv)_cjNf6jvui%b{s#~PTG(-1UHca**w;3&)C`Y?yfs` zH*siHo5(6H5+&{g+O$+@2)HCMRA@nMDH1JGd6XaI2bIF*4}U;Vp|(Qsrviy{=I(W3 zucPFy?x%CloH^&4bI#1{Z+}CsyhKXhC@FbFfoJT75})W_E_D;na zyizV!>l40+Ps$~#KM{xoq+F_QOEg3pq+F(MPc%jv6HSpO`CYCyCt4ycQm#;giPlIf zQ7j58I=cfy;sbJoCGjBIdSjP$h19*)m(h2S?w2E$})vK-* zD~!RL8{5ftzTPFi=B}Dz4(gsIv_>LGtFH{34e!w9JGc2w(Zfy>%Cr7s}DJu}*mKjEgjDT$zZBq@bfK}A2 zjjV3ZtvsiJW!c!C_5P%8aJ_EELK|5*ZDL;9%vxp~v}MV@A?B#bZ#>A#9wyEVp{;BT zea_hEjy!*R%{9!nvC4<>CwUL$@x~a9Y>VXH&KhP4Xh&YGeJ1z)ovi9%VgYyLZJ|5! zd_8LNPIW=71E#Nq4LvM#o9_$#Sm;om zpM$J}4nG0sgre{oN~m2OkBozl@w11_?ZkG{5gJ|{U4J0pEnPxFdKC1> z#Lr77Nl4U{ec-vv2dmF}@0~0DTjsX!0}T^3<%2NcSowb(lE|QVyrOlxWMVg{AxYhy zNKvNhg*2XENiCjA@)2>hqPkxO@q&d(@v(cu;LHl7$P!bG(s*(a!@~tRT_JyoMJI)J0sbZ+CqHvQ`YRsJ#BDej@v1sJ`W{YfBfwOs@;I}#oxqPOW~GB5tnYC|Jg_yGM1UvoVOo> z@*uRUb`ylZ!*5af%u#F~ypz4v* zIk6lHl4r!bp|B12j|fkM13{A88oUxcX#n?b*W9Ef@r_+0(BmKOTDSIMzJQY^0rZkH z7p8ce!k)%9=5qh7;^>bMevEM6#5j!|fy*>@gk070@Tr&2#8v2MMx(hM(ZSbhI0>19 z$LPuO-2Q=MHrHc6gZY!$@AQ0VS$GRQzm5J1p`J9AfbQb&pz;R@*n(y``3iniA>5a* zl}oB`pizDqE?+gd5 zgtgma%Pc_>7PF4sMcNIDCGMQDtbE4;jw}y1RvzceNSecQABY{B-OsayhH+ z?IQ;_*3)6sbCY1^o|M5hDW&*ipUd%k@c&ODiXMGcym`E~RJWZ;X=&Xym*VN*7sW@% z-#)FE$~#xk?@&=K2f^nka0mjF1AIkoh{lKwg9P_F>GjRK-cv83WOmf4${&~S5)wZB@sUTrug^i6Qn5{jS8!HetJM|o&N(X1ZaW) diff --git a/rag/src/api/main.py b/rag/src/api/main.py index d6e59da..819ee3c 100644 --- a/rag/src/api/main.py +++ b/rag/src/api/main.py @@ -22,7 +22,9 @@ from ..models.document import ( ) from ..models.minutes import ( MinutesSearchRequest, - MinutesSearchResult + MinutesSearchResult, + RelatedMinutesRequest, + RelatedMinutesResponse ) from ..db.postgres_vector import PostgresVectorDB from ..db.azure_search import AzureAISearchDB @@ -31,6 +33,7 @@ from ..services.claude_service import ClaudeService 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 # 로깅 설정 logging.basicConfig( @@ -62,6 +65,7 @@ _doc_db = None _rag_minutes_db = None _embedding_gen = None _claude_service = None +_redis_cache = None def get_config(): @@ -139,6 +143,22 @@ def get_claude_service(): return _claude_service +def get_redis_cache(): + """Redis 캐시""" + global _redis_cache + if _redis_cache is None: + config = get_config() + redis_config = config["redis"] + _redis_cache = RedisCache( + host=redis_config["host"], + port=redis_config["port"], + db=redis_config["db"], + password=redis_config.get("password"), + decode_responses=redis_config.get("decode_responses", True) + ) + return _redis_cache + + # ============================================================================ # 용어집 API # ============================================================================ @@ -501,6 +521,123 @@ async def get_minutes_stats(rag_minutes_db: RagMinutesDB = Depends(get_rag_minut raise HTTPException(status_code=500, detail=str(e)) +@app.post("/api/minutes/related", response_model=List[RelatedMinutesResponse]) +async def get_related_minutes( + request: RelatedMinutesRequest, + rag_minutes_db: RagMinutesDB = Depends(get_rag_minutes_db), + embedding_gen: EmbeddingGenerator = Depends(get_embedding_gen), + redis_cache: RedisCache = Depends(get_redis_cache) +): + """ + 연관 회의록 조회 (Option A: DB 조회 후 벡터 검색 + Redis 캐싱) + + Args: + request: 연관 회의록 조회 요청 + - minute_id: 기준 회의록 ID + - meeting_title: 회의 제목 (미사용) + - summary: 회의록 요약 (미사용) + - top_k: 반환할 최대 결과 수 + - similarity_threshold: 최소 유사도 임계값 + + Returns: + 연관 회의록 리스트 + + Process: + 1. Redis 캐시에서 연관 회의록 결과 조회 + 2. 캐시 MISS 시: + a. minute_id로 rag_minutes 테이블에서 회의록 조회 (캐싱) + b. full_content를 벡터 임베딩으로 변환 + c. 벡터 DB에서 유사도 검색 (자기 자신 제외) + d. 결과를 Redis에 캐싱 + 3. 연관 회의록 목록 반환 + """ + try: + config = get_config() + cache_config = config.get("rag_minutes", {}).get("cache", {}) + cache_prefix = cache_config.get("prefix", "minutes:") + minutes_ttl = cache_config.get("ttl", 1800) + related_ttl = cache_config.get("related_ttl", 3600) + + logger.info(f"연관 회의록 조회 시작: minute_id={request.minute_id}") + + # 1. 캐시 키 생성 + related_cache_key = ( + f"{cache_prefix}related:{request.minute_id}:" + f"{request.top_k}:{request.similarity_threshold}" + ) + + # 2. 캐시 조회 + cached_results = redis_cache.get(related_cache_key) + if cached_results: + logger.info(f"연관 회의록 캐시 HIT: {related_cache_key}") + return [ + RelatedMinutesResponse(**result) + for result in cached_results + ] + + # 3. 캐시 MISS - DB 조회 + logger.info(f"연관 회의록 캐시 MISS: {related_cache_key}") + + # 3-1. 회의록 조회 (캐싱) + minutes_cache_key = f"{cache_prefix}{request.minute_id}" + base_minutes = redis_cache.get(minutes_cache_key) + + if base_minutes: + logger.info(f"회의록 캐시 HIT: {minutes_cache_key}") + # RagMinutes 객체로 변환 + from ..models.minutes import RagMinutes + base_minutes = RagMinutes(**base_minutes) + else: + logger.info(f"회의록 캐시 MISS: {minutes_cache_key}") + base_minutes = rag_minutes_db.get_minutes_by_id(request.minute_id) + if not base_minutes: + raise HTTPException( + status_code=404, + detail=f"회의록을 찾을 수 없습니다: {request.minute_id}" + ) + # 캐시 저장 + redis_cache.set(minutes_cache_key, base_minutes.dict(), minutes_ttl) + + logger.info(f"기준 회의록 조회 완료: {base_minutes.title}") + + # 3-2. full_content를 벡터 임베딩으로 변환 + query_embedding = embedding_gen.generate_embedding(base_minutes.full_content) + logger.info(f"임베딩 생성 완료: {len(query_embedding)}차원") + + # 3-3. 벡터 유사도 검색 (자기 자신 제외) + results = rag_minutes_db.search_by_vector( + query_embedding=query_embedding, + top_k=request.top_k, + similarity_threshold=request.similarity_threshold, + exclude_minutes_id=request.minute_id + ) + + # 4. 응답 형식으로 변환 + related_minutes = [ + RelatedMinutesResponse( + minutes=result["minutes"], + similarity_score=result["similarity_score"] + ) + for result in results + ] + + # 5. 결과 캐싱 + redis_cache.set( + related_cache_key, + [r.dict() for r in related_minutes], + related_ttl + ) + + logger.info(f"연관 회의록 조회 완료: {len(related_minutes)}개 결과") + return related_minutes + + except HTTPException: + raise + except Exception as e: + logger.error(f"연관 회의록 조회 실패: {str(e)}") + raise HTTPException(status_code=500, detail=str(e)) + + if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000) diff --git a/rag/src/db/__pycache__/rag_minutes_db.cpython-311.pyc b/rag/src/db/__pycache__/rag_minutes_db.cpython-311.pyc index 2c7cbfe181d62572d15753abf49246c1b43560ce..7cbf029b913fee779b1aeaaa3179369084f5a2ec 100644 GIT binary patch delta 2264 zcmZ`)ZA@EL7(VBI^t-h{`6w{BWfW)y2XkNGHoiKRZIP(VxiALndM{g-Qo7sL4N?TN znW!ULJubruri;3bm?+zw2|vvI;bvxHv@AqO{eyqZf?d40xojGZ=g^f>#M9pAzVGvX z+;iXao^wAs10THw4VUzK4Z!0;5V}9Fxng(+Y79ijJrkmpP zPBZPfybk*+gp6*6H)B1IH?{#=p;SRXuY|uy{hCXV3BiaOEo{xsf)^nGpW-VqAP8hj zYjuA?s71ww4Q!0|_4-hoL4@VfHwFrt=2WH`Ro-n?-blfe$~vvGMpahn))OZfC`t{c zOG;Re?i6%FUfNlBf`WUbuZq5=s+)0gktX245L0yv0oT!9uOM#6s*M#hiD?gkd; zRm*NTF8ytJ1Ys+Bu=c6SSf+5&0++Ch|Cg4INt7P~47769fIG##RTH>ITlT zjkEflxe)nGx#;>jEBd|sCx+wtdE~6lM*mc+(T^1e6!kb*>_(eyMT5a?EYDAja`RUw z=A|#WipNv03^9e%=M%jAVmHUwZcnc>AeIs9USg#^ zg4bq9^!OpdItd&G*eJS)nCN*d#WIq`bM<<8cfj52jVXLi(b?mVvB!gg*cVfZfqnk=Wgq{DSgSbzC;EksAhfcphaIi z>7OetiyAGn`L@gT(XG!#UvNfUN26wUSTUDnl>wd6M9o%gkD9D=MOBvvqYZnb`;JDB z^~t!+VIzfaMNL$=MP}4yldJ=IHd#+3kc2QR=YR~;IqkdJksXmuQ%3u=(H=G0=kg1~ z=z{&V!JaSLCUdWJTTxo++bu+USiMy|cMRax=uUl|dRT5cPhFqf6A- zB@GscdOw|$sZeVLk`c-5RM9NUYUwM@ zIS!7!q10jd2FEx`)i+9MB9}uVS1ii4jANVfCV&`4AC8m`RyNbHUAnOD2MCX#<29DX zAo&KRnz~hVW8J1sv>%B{wBJ(CiN^_->ZTz2wq_UnL&{noVU+FI<}@UCltP->q@uJZ zNkAWgel)*@D@)%XVh6F*Vo09riASO8+7@V$PSh&dolV%s`H{y## zEhoTXNM>99mAJXx0e486`a3YgMvI-qwF^V54T_zJZtQCI5XweCK|o1>9M*}Q${g

9c6$S&NYs}Jyh30IebQ*5G!(kk_-2iTwU6wLtd0016{DTFMOgcUX7QGS z1sW(aPj}!pW9@PaI@R=&Yqqjl)^22Rt6`WkuNe_W3uKlM3Si8Vl|)j3;!;^nBn?<& zjkJwEn+VYXjp21Z{PYMN-ZJc+RbS7T-~S)0NRGyT0Tl#MsQ>@~ delta 1780 zcmZ{kO-vg{6vt=w(;wLQ6Js!791<`j4v3^sr%(zGZBb*X5EO;*5r_0Z0E1@0m`_WnHY z|K7Zroj0E6H{jRTpmo7wF#*yRzXcZ^N0+Q0K~oX6Nqc$)-+_t*2Pc$U zt_2ac<2K(gyr9hcE;F!4aaG-C8av4v5lhiUkTb;P^yu5;Ng1^fGsq(cb@fn`QS@Um z&;u8g-oSH+->3k^$t=+LR$<$O`z$3pK)&F(YI} z{H5KE|2bHC#GnsMJ9mbVBu2eY;&9|pOFy43Y&ysY`k2pwBz(c@HAtdH8A+s{z3;K3 z--m#!^>fN`9u|xv35^s*37@x=qv55&eDdo$WUoM7g;sXb%ZcSkPE97#DO67#VTw_L6kQb_Y3Qh0rq&;%L^D7Q z0ITDX#s7=N|IiXxvjkM&!#_26TFWg}_fqRN=cne6%_=ZdxKsyl*Q~n^th?&+^r~i| z#Ib3&+MQc~K+VICdyduN_YTLVPyN_;&$Bf6!{Dm#l=gjSi>}$CtG4L6r&4Vp6R1Fk zO=@lxG}dP%Av$bQb4#zOj4n$)>Gt;Y_MYtjG4+Y}&ADfaU2}VzTHXM{QXc-#LupXT*Pc#F|)L9g|uIs@B6t(jkr<^33L3VNg2Jbl!m%kcvcx~ zdH|t>4>wo0AekhMqBvpDsFgoS`daySD~}RXD-`__zR~h`uyy_ig+cc_Udu25v~SXVVeuD%but~OQi^>e4Q2ePSb-Tbf$h`DIW{}iyv0>Lpm zs4~Q+2OSwE0&HqWs)TdybA zj1{VRXKX%!1_?7KzkxG&;pAs<3U_wb!fSY}d-dfG9(q- List[Dict[str, Any]]: """ 벡터 유사도 검색 @@ -198,27 +201,34 @@ class RagMinutesDB: query_embedding: 쿼리 임베딩 벡터 top_k: 반환할 최대 결과 수 similarity_threshold: 최소 유사도 임계값 + exclude_minutes_id: 제외할 회의록 ID (연관 회의록 검색 시 자기 자신 제외) Returns: 검색 결과 리스트 """ with self.get_connection() as conn: with conn.cursor(cursor_factory=RealDictCursor) as cur: - cur.execute(""" + # 제외 조건 추가 + exclude_condition = "" + params = [query_embedding, query_embedding, similarity_threshold, query_embedding, top_k] + + if exclude_minutes_id: + exclude_condition = "AND minutes_id != %s" + # 파라미터 순서: 처음 4개는 embedding 검색용, 5번째는 exclude용, 6번째는 limit용 + params = [query_embedding, query_embedding, similarity_threshold, exclude_minutes_id, query_embedding, top_k] + + query = f""" SELECT *, 1 - (embedding <=> %s::vector) as similarity_score FROM rag_minutes WHERE embedding IS NOT NULL AND 1 - (embedding <=> %s::vector) >= %s + {exclude_condition} ORDER BY embedding <=> %s::vector LIMIT %s - """, ( - query_embedding, - query_embedding, - similarity_threshold, - query_embedding, - top_k - )) + """ + + cur.execute(query, params) results = [] for row in cur.fetchall(): @@ -229,7 +239,7 @@ class RagMinutesDB: "similarity_score": float(similarity_score) }) - logger.info(f"벡터 검색 완료: {len(results)}개 결과") + logger.info(f"벡터 검색 완료: {len(results)}개 결과 (exclude: {exclude_minutes_id})") return results def search_by_keyword( diff --git a/rag/src/models/__pycache__/minutes.cpython-311.pyc b/rag/src/models/__pycache__/minutes.cpython-311.pyc index ed05bce45dbb03f9340b4be804696a9c7aeadedb..ead0c5d4b76f347e6a77596a03e0aa28daeb1571 100644 GIT binary patch delta 1845 zcmaKsT}&HC5PtMX?Y(M6HMrjS8iIYSUJItExmgODMH?>Pz#04~Zy2s`AvCH8NH}UEhA% zot>E-&(7}S6AxYHyC#!?f%YiE`sRcgvyFW`bL?K1hUsBMQ=Adal73OkFw4+0&1 zMX*-9Z>>nQTw-cVRySsK?9SSR{vU1i%U~uSL)0K@5p{@H5KV~V|-pX--x~#`h17L&m`$FN2cMgSxh~tQ6T+SQy2S>v42^6#- zx)2qJN&xwl&tFTMe$%q2$+G1FyF>o9^aFcKrr37!sKilu7F90*YPE7Vj?W|d0Uo)N ztnz$5^*BHpco+Pq0Pm=#YBp4}XANlRXeGN4UDVQzLpS-8|DAP{snVYfeJJn%cF09R zV9${;LGElv;YmaX;uK&>D<8peF#?k`cHL?C>x+r4GfNtI2!(G0b^|oi055~!D)gu1 zq_u~}>{%i=tw#${GdHL~oDY%*)=$|%2+GcGl842INRahMMWbl?%Df19UdCM0<~2x# zl1?n@gqensII&o?h$SMwPtPcsK(92T2Q?=^U0D}3;0t=DdCg)ORF!Q*7?AuUVM*-s zjYq;#Xh6CikwW2Uqzd%Z+bf&j#vEI7Q|dw@eP_X;-dTZ(L!J9v{pMa%ga@6?A6L{b zb9H*VWh2Np3If#Quuqg|$k`K=-^6J@;2QL7)9sF);`X;0iSe=`fB^By&fDN^^M82I! zYt5eP?y-g@g5x3S|7(04h3X>V+9ZiyTQbC|R_F19(+cPG{Rv8}039BO=ZbM3w({e4`GFMvg_2QAtfo79Iztkmv089c#N{PhQBSeVDv`uV@goOmTkyuDb zERZ0PZtTP#U@ft+5H@P#FL2M)!X)1>XU@Inn|tRu{27ohCCO&sCv|05>T(>(W#aCr z?$$CdO&U}=;}pkMk+M;o9T8L#G*rDQ61iy3Ai&m*VY5-!MZpX?@T`z$hcG^&oBu!Wg4@SJ(;}S0!4PJbt~o47GAV zkLfcbtAzml^Ogu?gp9>cB0~G6<>aVXq<(jgGJ-;kk#;b$r{~%2o3Dc%C3}9D-8<0+ z=*+G4wxg*7=mfeLJZU8~Qu@DM+z8rUF4n(8s!^MOIm!4NU)IN;Vq=z1l2%Iw|JJba z8g7rmZf=7DC?x+6pTK*9%%!_l$ha!goG+T&DM1fDuWg!b!6)g=y!q^cLW=wgvUhY- diff --git a/rag/src/models/minutes.py b/rag/src/models/minutes.py index d3b2ff3..abcd3f9 100644 --- a/rag/src/models/minutes.py +++ b/rag/src/models/minutes.py @@ -106,3 +106,41 @@ class MinutesSearchResult(BaseModel): "similarity_score": 0.92 } } + + +class RelatedMinutesRequest(BaseModel): + """연관 회의록 조회 요청""" + minute_id: str = Field(..., description="기준 회의록 ID") + meeting_title: str = Field(..., description="회의 제목") + summary: str = Field(..., description="회의록 요약") + top_k: int = Field(5, ge=1, le=20, description="반환할 최대 결과 수") + similarity_threshold: float = Field(0.7, ge=0.0, le=1.0, description="최소 유사도 임계값") + + class Config: + json_schema_extra = { + "example": { + "minute_id": "MIN-2025-001", + "meeting_title": "2025 Q1 마케팅 전략 회의", + "summary": "2025년 1분기 마케팅 전략 수립을 위한 회의", + "top_k": 5, + "similarity_threshold": 0.7 + } + } + + +class RelatedMinutesResponse(BaseModel): + """연관 회의록 조회 응답""" + minutes: RagMinutes + similarity_score: float = Field(..., ge=0.0, le=1.0, description="유사도 점수") + + class Config: + json_schema_extra = { + "example": { + "minutes": { + "meeting_id": "MTG-2025-002", + "title": "2024 Q4 마케팅 성과 분석", + "minutes_id": "MIN-2024-050" + }, + "similarity_score": 0.85 + } + } diff --git a/rag/src/services/__pycache__/eventhub_consumer.cpython-311.pyc b/rag/src/services/__pycache__/eventhub_consumer.cpython-311.pyc index 8ffff5999f738bde95c7deaf24ea7b66cf9b43cb..9555a26563b089fba57bca86e121914d679c5c8f 100644 GIT binary patch delta 7927 zcmbt3TX0iHmiOvu*?L;CWLXc(_$h-Q1oNL=sR|ddo-5{brI75w!SFMXnQVd6OiFci<HjXf>OUJ z0t)=H6q|ye43vhJ(so)lC^F{=1f`|*l#Vu0rL>$b%i{Gw9xS5tW77UgO0fHO605SK*M-GqQ7YL2e>`C&+ z5$$9CKyZkm1AA#t(9dk%Izyy7Z*xoo<3MgDM17!DA9f;r3R>?Gyv6<7N7>?_CW7J5mh=S>DN+v zS_hmXrIct;JkOFcz>t#p`k;g=gXXve4`XEnnt?LG63Q3$qs(*}@RGnTRX`gfze`q5 z+kJ%g1-FF;x`ZuYSc|xd>|@u7#~L_!kY+|))Bq=g4H_IC^5m2bg^H>ohTpwQ>`n1d zcep4_xa3H{6jmH2hY7$G33Y;?NT@0DH4)VE+$a(>MjUDo&3YsslST)m?8qIC^o6(5 zuUt)Eeu@2hjb80&NRP$to|>ytA?sDr6UU3cyJs)5hxM?K+b^Dmkl6 z8Li{qmlNQSD%l(C;H-mWoWu^a(PfH5Et$XK!?sASpV9YzNhYXNX19YE>A za+oUiUhxw0(OF}OQtYh67TAN6dc6Js%`_rnDF7$QIN)CZPd9ezQ9DRC>s1e1ssZCc zZn=c}bP9g=o?|oWCnaG?Ow77hmsOIKXrUPxl?L-WND%BZ8k1NYma-d{mz78<$}8#E1XlT7-z1L2T{h^6qd21u6DU}RQ4koa-;atQ8I{I zkWGJ-Q_+K*G>bT~@9Ey!#VKe!I*%VeOmp&(?`fa^s4r9s-1C;rk&aHLpO1AoINi?e zecyk)dyi|&_P&k1+xxpW_i^ey^w0<}=wfJhkfzwF()FZ@{m;^hc1}D*2j};dGrA5l zeh(c8xJHJ3p&%V_@go=D0|G17s9##z3R7T~BWMBOlrs)?kA7thSIl>E1!2C-BR~nD z5`cPPVydux6Z^Wpvh*O*UH~QfU-$zZ*P7V4e#!dV=IYn&7wpp|Gy4+e&ZN0By5p9z z^u?YtJ@NAP>3#r^6UvUHvLmkS$jAt7McmeUL(>}9wBBZ2hFWc0yZ*M$60dBzp=*ij zS`hjBC7aqebrPR+YPt#Wr|QP84dPEXsG$5=N#o|V;?LGfyNTIjWt+%#yq4qAIOSnC z6C4f>`+crqieIQx%qu>#85eI1zG%5*;1CF4GeNRQ{o4Ds^DZV*O*n(#bd75@I17Oc<91X;8gnH96(&CRD2TTVbTv1 ziv%DG%d#}X12lP9o~4yh#zp;#@-!1wzKEvC)67)GB3f~dR%M~Ai)bZ<8!T9(y08?k zGQ}0!n_w{CfuE2@mC!VAhQR2c;X1CdV3!tE+QTZoqkU0F^$;U<>2`wDQM8^uYFI;>A?2AY25v_y9R28&X zf~Bw~rpEag!@9+L8`j1&{8aZ=Yxk4H**#%3j6e2gjQ{9E#xMDc#`p5$Yhe85QGHnd z@b!mF^Vf#{f%St#=4BQxIUyy86Ck;qMBw5f&$gU>7UZGD)48@9{Mwo;wF@_$1bI=S za8aRBk7~jiCc0StBf^2K3!=ryrm$wAh~XgAKX?#=c!lSCPz?)b020``A8gO4VevkU zmZ8*hYt%v$kGP9yJyAh#679k(MCdG1(M0Egb1JVoC(!Z(X=}lGsO3qEXY2 zOgIanbd)?w924&&j*`yhp}z%oymyBe)1Q1fIIQXSC+FV0;%LfxiFe*VnLc&ek$(Qt z-B(VtRYoh@UDpr^bpgk`8|m1*>CVhaV0GgvSR*aEcL{4uT80oeJR@UNGN~4Kb04amU?f{|=d* zxyBDY@m%`M2LjK~lEs~biRM>wG5zD0Ivk;5Xy$0Rd*N()YO=%e9q9~}04C42!|@db z^%LUe=H?JOLb?9`{Lx$l1T;5$^6sn9vHmOc9C>cgvflCKbLSlO-;wp4iubpNz@ZGd znd6)+K)V^wK~5USrj| zQF?gjU~uTdtC)V%$wgF0_=jAMu!2v&?R1JcDgRz$_5yq62LJ%2;ZZI+_uiW)qR5#M zPQ%b%`iL865%BmKnv)$oKEMo9T=9rI=sC#yHy(6>bEz9|c|0oj&^eocJDnnPCyXHA z;UVf{eh8Gez=7t-V>$O3Fy9re^SVa{DEEdF?d+X~ib!_*1^26Yo!9SidjlJwAhh}& z^a-FJagvBV6L)qb>(`zn7&IP_J4Kur1jNZ1@WPk?9YXJafx(^XS*zOq+{dYadtRB4OR?> z+Mr>2Vmv(toGxEV|NLE0_PH}JX9vYscY5Yy)c(1*KfL=&bY3Ovu;YRkd-kc$eo)ZM4IFo6wS|A2 zaiv4TtDc_UcTPLsR?r_#9H4_-M0k_Je#_j457R!16T2xmjsZUtCGu2ZbPm zupm`-lEU+NURRlYxaNLjp~;;KI58n_Fu?3btU7xpvPjemp2`&kXc`^c04Ebrj33*R z3@09@jxh(&#&c3$^93&+pET@WFDpZnDY)?)S@#MP`+p5Z3-y(ShJlnM@7Jqcq~b~P zw%+vex(p#wnQm!~6UuYSxNRVz^(3{PxYm=>8pmbe%2(6~u7ASZmNd6Tcck>Ti4EsA z#OkJ(B=k*5eN%LED)&6dwE@PFJYV%Wb-eNi(KZ&G zp2EE6K(tW$Pz=ZONr1FWl@(Eb2vEt6`*Yg^LV7TtNhW<%{Oe#@s`f(`h=}JY3q*mrL4}I)}|ZQrfL7R zK*HLUw01>z!VD^_FM4m<*WIwMOBt7>jFwbwdqz%FuK${lRI2YIi0;a$p;^-2deh!@ z!`^khH(}qMwC|4YO4+I|?!Rg4xMAyvq#P~z-uAW7+m5~M>S!PIHkqSaZ<#7y3cVbP zZi7KBjTu6w62Q1DRpE#kFE%GDTF2!neMPJxu5W~#GE~GZ%i@M6$Vo%fj6GrK6lw`W zQ)=mo@hy|<5{8D9!7|ZzF47lUl`u3W4UKUF^t4X&p6iX75(a0|;EWrb-{PRo453sl z;lZChs4ZdG@J9zN7&G#aL1A1N)?S+-#APrnfJriCu}<#2*q*d3n~~qJtd3h&r>wTP zy(MmKg`Bju&TNUV?M=4rj6ZfD(RLtVJs?mL*4C7@YO*^cC9G?{%@h+V!;8IVdgHdW zkgq=;jr1mzJCe#BapjJb(Kb0a8JZk?*&p2s6VRG6M6t?8;-M=!R}!}lPVWE!`B$F! z_xAnL`|n<%3NWD^N@|DV+M!$3%ch^0aVM(RB&*lJX6cMPc&TT+YtopqRK@BpZW!MT zsv55b6Aq#CnCLmzlM#{T$H+-fhQR*Y{lso8Vb|KHv zx`QHSX!d{V!ldym@}5NAa=1l;5D;SepvjSj`l>vMnZ`zMA$S{rQ^cUJ$#k+GH&l>S z>~9)+MLS8h-ud@rHTz3vSjrp&^6c(L4XI`Zu!D}jmzneI(@U)pel-{{yK znPBi0z^p*93PBTsW&|4%;8+X>R+#e$9z_sE@F4=+VBX0TCZfkG0+dSNZIXz9JDU4T zN$TQ~x{Q%%S&>@Wk}0c^Ix+-++ZKC9iWM1AZpp~8R79Aq83mS#iJJOM36_*ZRZT{P zB{gBL&1kTsCCVE!IxLkEr4{jt#-wg(Mvrv^p)*e!CLNyGiphf)?MZFJ{DAzZ0_bJ; zuXH?CDecS=b9=VM7RrH&n2PXv(K#g^iO<2sa^QF1e|#cVjm0*@E;{O2|CM+ zk?m=>kqZ1AqFW?22=~<$i?ja4F3S) z6cE$z^$!ifB0h(vLU^ASBX1vYVT+D3JU>fE{8Y$GZ(wc#88tF+n!Ug7!^rYDu^^|2 z*7(AlBHH5%^KC^%)Ra_IOs+{NYLbeYli=BJmyzJ`Jsf_`b6&s_LO%wj1Af5#TM@{{x%> BY^(qP delta 3105 zcmZuzeQ*=U72ng{>BBzhBw5xswoD9I0vn7&`Le-|F~-fnM*UJbm*iL(@_Tg>P*tUcapzo zPPae3eednt-M8=UyYF7({*+@aqhy6 z(6ddgp}8v)bC=(kJAH2M!c?Kd-sUc|Lxz&^frVLtuoXHFZvt_FsHB%uNUuTRdU?g5 z3JMQRfF?pSLNlqNVurQb6br1=q!dk(UNi2q*P=*(MT!-$81^Hnf@)RdL4L_D?W#@f z5f&MPg5m%(vf@pX5O0p(3~_FUBICwY`)7WK1E)PT|YvAS){%0Ad(dT8mA_46QNLuu3#}~CATGePLlX=05x!gCJu}wk}6$| zj5PpZj^gkn#v~5ZDpN~~`w62iV65@)-T~H z#xC*%NiC!VA;SwtP)X>flVZxqR#aE;rc^2G3;Nmbot{<3lj126M=Cls#-$dLkC0`f z%!{Ms$40UH&No}q=uby)C<`d+Oqm896d5N2Y65R|1a*^+wR)8BQx%X zS$D&*ot(wTLGXA47E6^XUjkE;#KLo^sF z4HfLm+9$cw*}9D?XQEGm+JJ#|+FjY7)!jGR>DSP@WmHvDV7*OYm$w}@{EN$)w`aJL zeITRXKm`-r!6`U9js2j0P5lC&j-o~a;V3}ZK&?n`*J;gAvq3W@)dBQQ64OD??l0;) z40i}?Z}<^p>Vt-iq!krr2M=cBJ7li-O(+h!5!%CE*%=&PNP60i=J5v7oI`3{rTrTiX6!$DRE;b76VT5{7*53En1yJ4 z$pGkT*24MqVYnt~5_tcYp)bL#>o_}mz4bRnjLdK;JGiH2Tu*Qt+LRH>5Y{7XLRvs!M^dR7!P6dQ|guMtaA$%JFC&^z94x|vUbR=8hZkU+=^^-fo>Sa)_d!2u`>Wpz?LBD_M_H1A^0r>}W5vtBq3rw{3sTodB`qbhYVQ*=eKY57+Idp6o?)X#D~`(f0x zb}?`DSivfhPd$t&h*X9Q41Vfm|BRMz`>MjB*^-clslLKTAf>N^ehs)Y*|=Cj{H*br zwvwD|wi`bu0FMwR_T*gb$Isl`Ao-iB$OlzBn(O%w!xqGiO=9zA{?=v@I^iJw9+=cj z{mJ9;fmniWWxv|@OZIZ7qXPq8vp~`7NDK|Bl%B_>>YLIxsb>Z*=dp19kGXy{p`=ID z9rP+l@#vH7?2FFdj&GPI%ig;d{~6D$#eZ?jjHPncQaNGF8M_58k|SS@pX>ZbOQqCY p!P)Le_NkJofhq5~XpV>eT~{b4!awARYjw_q6anz*_!#JE_&*v- Optional[str]: """ Java LocalDateTime 배열을 ISO 8601 문자열로 변환 @@ -302,7 +419,8 @@ class EventHubConsumer: async def start_consumer( config: Dict[str, Any], rag_minutes_db: RagMinutesDB, - embedding_gen: EmbeddingGenerator + embedding_gen: EmbeddingGenerator, + term_db: Optional[PostgresVectorDB] = None ): """ Event Hub Consumer 시작 (비동기) @@ -311,6 +429,7 @@ async def start_consumer( config: 설정 딕셔너리 rag_minutes_db: RAG Minutes 데이터베이스 embedding_gen: Embedding 생성기 + term_db: 용어집 데이터베이스 (선택) """ eventhub_config = config["eventhub"] @@ -321,7 +440,9 @@ async def start_consumer( storage_connection_string=eventhub_config["storage"]["connection_string"], storage_container_name=eventhub_config["storage"]["container_name"], rag_minutes_db=rag_minutes_db, - embedding_gen=embedding_gen + embedding_gen=embedding_gen, + term_db=term_db, + config=config ) try: diff --git a/rag/src/utils/__pycache__/redis_cache.cpython-311.pyc b/rag/src/utils/__pycache__/redis_cache.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..128904e7f628cd11761c7304dbe3d3ce1124cb14 GIT binary patch literal 8529 zcmcIpZEPFInV#kD@=Gg;HuXh)*lWvnL^aljW?Ui<)n!IFf@0q(4k0m zmyB#3WhglTp)EC44H;q@DP>yMm0<^<8>di;6sXenaJc)kbP1GL)Ifmy6^Q~ExCaFO zb??lQOD-)XIUu)OzB4;J^UmzdJn!?)%x^0z?Fg>JZ&LoIT7>=^KNK!DAGv=SA`3`B z!$_b6Q-B(#NN5^1k&qsyA*2J$C_BuKnupC4&c_5Sqt;<7g-l4K&)Et}Mf-IMp_}m6 zuHgz3dJYNfG!o3$P4EW(`8S+UAy~yq!6sInWd!>)J6tW8hLD?!G(isgDN*pteD)7> z*_qpXb}_Lrv$B5u*2YZI{v}p0=r*a=7skT=P|zDt>Av8F89w6!wPoMEHW-#i%=n2&e{bIT4)t2Azu}|w-w(* z>#L`kVY}cWZ?}myVLNE4f>Kt&38gCXr7V!M26A#jEz!cla~(Wamb|Zr=PH4PerQy+ zJ~-<2y)H)TpgD#v*?8;D`UmmsZ z-bYJ}alXOaG!LOx6y}O0_8{r-q}iYsf8#@!z=XFI6QgFMW~h-}qK#>|w$iVC6`m)} z7tOd0T5OyeN9XBR(KzL{MAksNozGv{JF&HumRc0H+28j*YTC!7xtVK1+Z`$l{P zMtkG(iXjIcUOmUpZk4|l&JE$0#y_>w8xwbL8+{+UX@cRo!0ouCp-XfHQP8@XGR93M>=K6*BJ@>19B&6rpJe2-7$7S zwR$}Mpg-*KOgKr)3En#ji4Leu{xgUvl-pBj+j*~X=i(1CwJv-+YcsB0nO)tv3UgD{ zR|v#Ev4{=Kp2#^+<+j-qf9IO-a?L4jN1EHAa69gC+kbZA@(HEkaFPLm!>|^nxFc!q zh*G$}zE|ClLnhnKqQGSbFApkBFMZOJ{K@Ud?mPxj?M`v0(%dP9JC$kNfh&)d{Jw@O z$ATsZWw1`@?Y{cHCbZgQ@83ParD+M>L=|%3FiIJrJ86oVr0y_N%(J<9(u~cL$ygf9lumhI6m>Hd zEz38AzC#T(HfImlfWPb^Lw0DAHfY?!kP!pP8q8Ul>DtV6g88B*>5D-3V7^GK#C(|} zv(Q&Mx(P8aW*6qN(~JCC@(Q2*FuC!I*>5stFuq_lFrhE<8*g7LW<5p5yv+1z8Q14D z?d$Qm^~>}8U??c+O&E+|(~?*CqhqJRKwvYIPk8>=&`{oFya{__hbMyO(#{ zq#7ur(j#J6!W^rzf_Nq}qB7^?P*7z9A+I1yc;2e4C`lnnYJ|9(k+6>4lCXF9CZua6;5gCUOox}?v&#|+HpW}9Jp8CG(VBpo2qY1 z*S9H-HjLJjmrp9Lj%6nZxKmtbn(I`!PEu6?-~{EG(2MjZTNPJ7+<$Cc@qW7RvwhlA ziaVO-jw;+yqG0Zz_AB7K0poiIeAi4L*Y`MDZD_&raeMz0^yk$6{)6=A2U&=J=>QUt z+901whrjztu#z%7%}y_{r9%WsZtaAClKxehvS>UzJE z140lhFj1N~1#G!(*wh6%G|7Gk7sNu4Yc(LZO#c?hwN0`YS%O>=D?zS3@@MF89X1*o z0J$1$6I0m_epAHa!#+qkZ1dbl0y6ah)I`a~)dW_lSA=uG829q)znxwG^(+8yaV^fX_=!7E?omAJrc_Q0$`MKQcx9j8AHmK<0o|kxz5IlQZ##YZBt%TI`!sPG z3^{cCOS_>k_zlDWNPF>=WQEA+7}S+=LRo;25^a6LMPk1Y2<0l1U07UJUEQ)%ug zg?q|i0bH2kHKCXOb_)Q_EBp!;z=bUUwv;n{&ORQk@`T~r_v;M5IjL{|9!VX*TVhZ) z2mMxrF3^N-OI9DSZa6e)GHBF^9zIjQz!2c|2ph)ilfTLxfh|C5o-|z~E)1*|AXWle zOXN*ZrDLfuh2Q=tn^-J@=iAY$Yxuw5%z!IWWiM}p5=ktFl11ZEvmgclKwIMH23>+5 zLYvt70#Y>AJOB?9+e%ndQ|EM_f*Et!b`R;ac@M-Gvd+ z1$T<;PIKJ~*ZuzpgL-J^%;S9wT4n70W_q=1e?J90$U8BlA4P71eSou z9LAmQ>3=q03VU%eI#dEcs z;aCl!2l1=NL8z=R6bXhkUc*L^@EXCZTBYIBlkcGk*F(@Pyuubu{x1*)2-jwuHFMqA z_k~#f{15-`Y`yDjO+1%!KALtu8XL$|J9CJxY{@jV$C<^7bVK{{fYQ)C$6|N5;!1_m z{6g|&5ODwL$65$7<#;jecu{e@n5l1`<46?+pSKn>o+fnb@cc@>;(8wLzYhJ!w$)eu z@{0D9;s(>)pu!Cj1#{inufTYW17@%{lluwVdX!M!!O ztorna?D|!{j1^385YQ6tDuHjFyGkIp1-SFD4j1-Gp{DQ1U98SsBvt}Hb7UIS=rg*& zT_4`begKFgyF~oPdsnkdE8ioNm1@_kepW+M2|}`3KCSw4gqZULCZ6}pVQtx`VMO=+ zq#pP(*}zvngcJi`X{F!A8Dk&}lfA%K4DgjU+4tUc?oIeo&i1skefg!k&JKm^D9qH& ze6wRKu%J5z_g|fVdTF)pFLl~eiaVa>jw{@8;yP~Xo8g7-Op6=cu=o9d{&;`iK6-T@ z3sKmp!!||2);qs>?4~3)Jh`j!?o`k_DtbJs-QyVz36TJfa~{u6BHlp$jm6^;LOzd& zc*iR32Sb5-NM+81LIDXc3MD)>$$D7o!ZBifp1?8OdpFR1kVvC{?0`vFU~fw91r$u_ zzYN1G44<>2S{|0kneEQZ?tPhEdvldLS=gxp@kQ0P9E%^!sCs+Of@4-x>B!k|%#NH* z@t*npxeENmp{AY1f~2%2`l&j$VNT8=2;%3L>BUJBEf-yNEDR3_EvqZhL!Oq0NU$F7Pfs2%==r zll`|P*bV0MEo;k8CpIAE?OPjHKgv_`Gv~ddV*#3X>P zP*;~*ZjcysE$8LGX?7}ZDd`5iKD zd*JbvEK$06z9VxcbjcD$BT&Jws8h%fyl{8O*zC=_EDMUN8%@zYn0|g$vO~l z&)Mc|kb&Q)G(Vl(qdamX5nk@QHl7$?>4y}!$?N7_zkK2sPb6MVHFc(&I%6j@)lEwE zBboYE#nB3->l)`y$M-0;U5OeH+Pz$-g|TOG{dG$9u8gC0!FI(KcPCz19!fd7(~fS% z(fx(f6?9XMSdB?E1TUJ)T9{i zFKmsm`n0Vvekf(zleX=dGUv>vOcW5|=JG3&{?F34=a@$+SOb8V1LB4t4#ZtZ+AK!C G^?w06jC-#D literal 0 HcmV?d00001 diff --git a/rag/src/utils/redis_cache.py b/rag/src/utils/redis_cache.py new file mode 100644 index 0000000..ff0ffc8 --- /dev/null +++ b/rag/src/utils/redis_cache.py @@ -0,0 +1,206 @@ +""" +Redis 캐싱 유틸리티 +""" +import redis +import json +import logging +from typing import Optional, Any +from functools import wraps + +logger = logging.getLogger(__name__) + + +class RedisCache: + """Redis 캐싱 클래스""" + + def __init__( + self, + host: str = "localhost", + port: int = 6379, + db: int = 0, + password: Optional[str] = None, + decode_responses: bool = True + ): + """ + 초기화 + + Args: + host: Redis 호스트 + port: Redis 포트 + db: Redis DB 번호 + password: Redis 비밀번호 + decode_responses: 응답 디코딩 여부 + """ + try: + self.client = redis.Redis( + host=host, + port=port, + db=db, + password=password, + decode_responses=decode_responses + ) + # 연결 테스트 + self.client.ping() + logger.info(f"Redis 연결 성공: {host}:{port}") + except Exception as e: + logger.warning(f"Redis 연결 실패: {str(e)} - 캐싱 비활성화") + self.client = None + + def get(self, key: str) -> Optional[Any]: + """ + 캐시에서 값 조회 + + Args: + key: 캐시 키 + + Returns: + 캐시된 값 또는 None + """ + if not self.client: + return None + + try: + value = self.client.get(key) + if value: + logger.debug(f"캐시 HIT: {key}") + return json.loads(value) + logger.debug(f"캐시 MISS: {key}") + return None + except Exception as e: + logger.error(f"캐시 조회 실패 ({key}): {str(e)}") + return None + + def set(self, key: str, value: Any, ttl: int = 3600) -> bool: + """ + 캐시에 값 저장 + + Args: + key: 캐시 키 + value: 저장할 값 + ttl: 만료 시간 (초) + + Returns: + 성공 여부 + """ + if not self.client: + return False + + try: + serialized = json.dumps(value, ensure_ascii=False) + self.client.setex(key, ttl, serialized) + logger.debug(f"캐시 저장: {key} (TTL: {ttl}s)") + return True + except Exception as e: + logger.error(f"캐시 저장 실패 ({key}): {str(e)}") + return False + + def delete(self, key: str) -> bool: + """ + 캐시 삭제 + + Args: + key: 캐시 키 + + Returns: + 성공 여부 + """ + if not self.client: + return False + + try: + self.client.delete(key) + logger.debug(f"캐시 삭제: {key}") + return True + except Exception as e: + logger.error(f"캐시 삭제 실패 ({key}): {str(e)}") + return False + + def delete_pattern(self, pattern: str) -> int: + """ + 패턴 매칭으로 여러 캐시 삭제 + + Args: + pattern: 캐시 키 패턴 (예: "minutes:*") + + Returns: + 삭제된 키 개수 + """ + if not self.client: + return 0 + + try: + keys = self.client.keys(pattern) + if keys: + count = self.client.delete(*keys) + logger.info(f"캐시 일괄 삭제: {count}개 키 ({pattern})") + return count + return 0 + except Exception as e: + logger.error(f"캐시 패턴 삭제 실패 ({pattern}): {str(e)}") + return 0 + + def exists(self, key: str) -> bool: + """ + 캐시 존재 여부 확인 + + Args: + key: 캐시 키 + + Returns: + 존재 여부 + """ + if not self.client: + return False + + try: + return self.client.exists(key) > 0 + except Exception as e: + logger.error(f"캐시 존재 확인 실패 ({key}): {str(e)}") + return False + + +def cached(prefix: str, ttl: int = 3600, key_builder=None): + """ + 함수 결과 캐싱 데코레이터 + + Args: + prefix: 캐시 키 prefix + ttl: 만료 시간 (초) + key_builder: 캐시 키 생성 함수 (선택사항) + + Example: + @cached(prefix="minutes:", ttl=1800) + def get_minutes_by_id(minutes_id: str): + ... + """ + def decorator(func): + @wraps(func) + def wrapper(self, *args, **kwargs): + # Redis 캐시 인스턴스 확인 + cache = getattr(self, '_cache', None) + if not cache or not cache.client: + return func(self, *args, **kwargs) + + # 캐시 키 생성 + if key_builder: + cache_key = key_builder(*args, **kwargs) + else: + # 기본: 첫 번째 인자를 키로 사용 + cache_key = f"{prefix}{args[0] if args else ''}" + + # 캐시 조회 + cached_value = cache.get(cache_key) + if cached_value is not None: + return cached_value + + # 함수 실행 + result = func(self, *args, **kwargs) + + # 결과 캐싱 + if result is not None: + cache.set(cache_key, result, ttl) + + return result + + return wrapper + return decorator diff --git a/rag/start_all.sh b/rag/start_all.sh new file mode 100644 index 0000000..d4c9d11 --- /dev/null +++ b/rag/start_all.sh @@ -0,0 +1,47 @@ +#!/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 new file mode 100644 index 0000000..56e0887 --- /dev/null +++ b/rag/start_all_services.py @@ -0,0 +1,180 @@ +""" +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 index 7d47e83..7d35fbd 100644 --- a/rag/start_consumer.py +++ b/rag/start_consumer.py @@ -4,6 +4,7 @@ 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 @@ -28,8 +29,11 @@ async def main(): # 데이터베이스 연결 db_url = get_database_url(config) rag_minutes_db = RagMinutesDB(db_url) + logger.info("RAG Minutes DB 연결 완료") - logger.info("데이터베이스 연결 완료") + # 용어집 데이터베이스 연결 + term_db = PostgresVectorDB(db_url) + logger.info("용어집 DB 연결 완료") # Embedding 생성기 초기화 azure_openai = config["azure_openai"] @@ -45,7 +49,7 @@ async def main(): # Event Hub Consumer 시작 logger.info("Event Hub Consumer 시작...") - await start_consumer(config, rag_minutes_db, embedding_gen) + await start_consumer(config, rag_minutes_db, embedding_gen, term_db) except KeyboardInterrupt: logger.info("프로그램 종료") From 43d919dded475fd52ed655bd95f90a13a3596b34 Mon Sep 17 00:00:00 2001 From: djeon Date: Wed, 29 Oct 2025 15:31:29 +0900 Subject: [PATCH 2/3] feat: change api path --- rag/src/api/main.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/rag/src/api/main.py b/rag/src/api/main.py index 819ee3c..b1e989b 100644 --- a/rag/src/api/main.py +++ b/rag/src/api/main.py @@ -176,7 +176,7 @@ async def root(): } -@app.post("/api/terms/search", response_model=List[TermSearchResult]) +@app.post("/api/rag/terms/search", response_model=List[TermSearchResult]) async def search_terms( request: TermSearchRequest, term_db: PostgresVectorDB = Depends(get_term_db), @@ -273,7 +273,7 @@ async def search_terms( raise HTTPException(status_code=500, detail=str(e)) -@app.get("/api/terms/{term_id}", response_model=Term) +@app.get("/api/rag/terms/{term_id}", response_model=Term) async def get_term( term_id: str, term_db: PostgresVectorDB = Depends(get_term_db) @@ -301,7 +301,7 @@ async def get_term( raise HTTPException(status_code=500, detail=str(e)) -@app.post("/api/terms/{term_id}/explain", response_model=TermExplanation) +@app.post("/api/rag/terms/{term_id}/explain", response_model=TermExplanation) async def explain_term( term_id: str, request: TermExplainRequest, @@ -347,7 +347,7 @@ async def explain_term( raise HTTPException(status_code=500, detail=str(e)) -@app.get("/api/terms/stats", response_model=TermStats) +@app.get("/api/rag/terms/stats", response_model=TermStats) async def get_term_stats(term_db: PostgresVectorDB = Depends(get_term_db)): """용어 통계 조회""" try: @@ -369,7 +369,7 @@ async def get_term_stats(term_db: PostgresVectorDB = Depends(get_term_db)): # 관련자료 API # ============================================================================ -@app.post("/api/documents/search", response_model=List[DocumentSearchResult]) +@app.post("/api/rag/documents/search", response_model=List[DocumentSearchResult]) async def search_documents( request: DocumentSearchRequest, doc_db: AzureAISearchDB = Depends(get_doc_db), @@ -415,7 +415,7 @@ async def search_documents( raise HTTPException(status_code=500, detail=str(e)) -@app.get("/api/documents/stats", response_model=DocumentStats) +@app.get("/api/rag/documents/stats", response_model=DocumentStats) async def get_document_stats(doc_db: AzureAISearchDB = Depends(get_doc_db)): """문서 통계 조회""" try: @@ -437,7 +437,7 @@ async def get_document_stats(doc_db: AzureAISearchDB = Depends(get_doc_db)): # RAG 회의록 API # ============================================================================ -@app.post("/api/minutes/search", response_model=List[MinutesSearchResult]) +@app.post("/api/rag/minutes/search", response_model=List[MinutesSearchResult]) async def search_related_minutes( request: MinutesSearchRequest, rag_minutes_db: RagMinutesDB = Depends(get_rag_minutes_db), @@ -481,7 +481,7 @@ async def search_related_minutes( raise HTTPException(status_code=500, detail=str(e)) -@app.get("/api/minutes/{minutes_id}") +@app.get("/api/rag/minutes/{minutes_id}") async def get_minutes( minutes_id: str, rag_minutes_db: RagMinutesDB = Depends(get_rag_minutes_db) @@ -509,7 +509,7 @@ async def get_minutes( raise HTTPException(status_code=500, detail=str(e)) -@app.get("/api/minutes/stats") +@app.get("/api/rag/minutes/stats") async def get_minutes_stats(rag_minutes_db: RagMinutesDB = Depends(get_rag_minutes_db)): """회의록 통계 조회""" try: @@ -521,7 +521,7 @@ async def get_minutes_stats(rag_minutes_db: RagMinutesDB = Depends(get_rag_minut raise HTTPException(status_code=500, detail=str(e)) -@app.post("/api/minutes/related", response_model=List[RelatedMinutesResponse]) +@app.post("/api/rag/minutes/related", response_model=List[RelatedMinutesResponse]) async def get_related_minutes( request: RelatedMinutesRequest, rag_minutes_db: RagMinutesDB = Depends(get_rag_minutes_db), From 50b4f645e31e04aa0ed9a60248d1e2f9ca863aff Mon Sep 17 00:00:00 2001 From: djeon Date: Wed, 29 Oct 2025 15:32:33 +0900 Subject: [PATCH 3/3] for merge --- .gitignore | 1 + build/reports/problems/problems-report.html | 3 +- meeting/logs/meeting-service.log | 8326 +++++++++++++++++++ 3 files changed, 8328 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 362713d..d99efe2 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ build/*/*/* **/.gradle/ .vscode/ **/.vscode/ +rag/venv/* # Serena serena/ diff --git a/build/reports/problems/problems-report.html b/build/reports/problems/problems-report.html index 922e760..c046c57 100644 --- a/build/reports/problems/problems-report.html +++ b/build/reports/problems/problems-report.html @@ -650,8 +650,7 @@ code + .copy-button { diff --git a/meeting/logs/meeting-service.log b/meeting/logs/meeting-service.log index 8daf2b3..9425c58 100644 --- a/meeting/logs/meeting-service.log +++ b/meeting/logs/meeting-service.log @@ -2213,3 +2213,8329 @@ This generated password is for development use only. Your security configuration 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